确定java中字符串的结尾

pcww981p  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(321)

我正在尝试使用lexer来确定输入中是否包含string/integer/double/etc。我已经成功地确定了我是否在处理除字符串以外的任何其他部分,但是我很难弄清楚如何处理字符串部分。
假设我有三个输入:

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()));

现在,在我的代码中,当第一个引号出现在字符串中时,问题就出现了(例如,请参见input2或input3)。我逐个检查输入char和else,如果分支是由引号开始确定的,这就是为什么会有pos++和当前更新(例如input2中的't'字符)。
如何确定字符串是否已结束(5432是否是input2中的整数,而不是第一个字符串的一部分)?

cfh9epnr

cfh9epnr1#

所以基本上根据lexer,输入3的输出字符串int在我的例子中是正确的,因为使用标记 \" 不只是剪切它,我必须在字符串中创建一个引号符号,因此 \\\" 剪切:两个反斜杠中的第一个将显示一个反斜杠本身 \ 以及反斜杠和引号 \" 将以字符串形式显示引号。总的来说,显示的字符串 \" 它只是引号的符号。

相关问题