我正在嘗試使用Lexer來確定輸入是否包含String/Integer/Double/etc。我已經成功地確定了我是否正在處理除字符串之外的其他字符串,但是我無法確定如何處理字符串部分。確定Java中字符串的結尾
所以我們可以說我有三個輸入:
input = "\"asd\""
input2 = "\"The string \"String\" is really great\"5432"
input3 = "\"The string \"String\" is really great\"5432"\One more\""
Expected output from:
input = <STRING:asd> //Works with current code
input2 = <STRING:The string "String" is really great><INTEGER 5432> //Broken
input3 = <STRING:The string "String" is really great><INTEGER 5432> <STRING:One more>//ALSO BROKEN
輸出處理等做工作,所以這不是問題,問題是處理字符串的結尾。 可以很容易地處理不包含引號字符串,這是目前我是如何處理它:
StringBuilder sb = new StringBuilder();
int count = 1;
pos++;
current = input.charAt(pos);
boolean last = false;
char next = input.charAt(pos+1);
while (current != '"'){
sb.append(current);
pos++;
current = input.charAt(pos);
next = input.charAt(pos+1);
}
tokens.add(new Token(TokenType.STRING,sb.toString()));
現在,我的代碼,當第一引號出現在字符串出現的問題(見輸入2或輸入3例如)。我通過char檢查輸入字符,else-if分支是由引號開始確定的,這就是爲什麼有一個pos ++和當前更新(例如input2中的'T'字符)。
我如何確定字符串是否已結束(5432是input2中的整數而不是第一個字符串的部分)?
您是否嘗試過使用'input.length'屬性來循環,直到達到您正在解析的字符串的長度? – Phoenix
嗯,我可以做到這一點,但我不明白它可以如何幫助我。如果我有一個字符串「數字是」5324「」我如何確定它是一個字符串不是STRING,INTEGER,STRING。 – Banana
爲什麼直接獲取你的字符串之間的函數'split()'有什麼不同?\t「char? – Phoenix