我正在尝试使用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