我正在寫一個詞法分析器。我有一個開關結構,這裏是該區域出現的代碼片段。Java開關結構不讀' n'
//whitespace
case ' ':
case '\t':
case '\n':
consume(); System.out.println("consumed ws");
break;
//identifier
default:
if (isLetter()) {
consume();
state = 8;
} else {
System.out.println("invalid character: " + look);
}
break;
的問題是,雖然它會正確消耗空格和製表符,它不會消耗換行符,而是去爲默認值。
我與其他地方的'\ n'比較,他們工作正常。例如,如果某行已被註釋掉,代碼執行:
case 10:
while(look != '\n'){
consume();
}
consume();
state = 0;
break;
如此看來,這只不過是一個錯誤,當它在開關結構,而不是if或while語句。但是,如果我在缺省情況下添加了一些處理換行符的內容,即使我打印出外觀,評估(look =='\ n')爲true,並且它在輸出中創建了一個新行。
我認爲在Windows中換行符可能實際上是\ r \ n,但我不確定。 – w4etwetewtwet
添加一個'case'\ r':'。 – sp00m
錯誤實際發生了什麼文字?你是否嘗試過與另一個? – GameDroids