3

当我使用“+”、“*”、“(”和“)”时,我不断收到关于悬挂元字符的错误。

我已经尝试在正则表达式中转义这些字符,但我仍然得到错误。这就是我所拥有的:

"[-\\+\\*/%\\(\\)]"

更新:

测试:

String input = "+";

String vals = new WNScanner(input).getNextToken();    //**********
System.out.println("token: " + vals);
System.out.println(vals.matches("[-+*/%()]"));

从另一个班级:

    ...

    String expression = input;
    ...

public String getNextToken() {

    String[] token = {""};

    if (expression.length() == 0)
        return "";

    token = expression.split("\\s");
    recentToken = token[0];
    expression = expression.replaceFirst(token[0], "");     //*************
    expression = expression.trim();

    return token[0];


}

*这些行有例外。

4

1 回答 1

7

好的,我不知道你想在那里实现什么......尤其是在这一行:

expression = expression.replaceFirst(token[0], "");

如果您的输入字符串是"+",那么您的整个正则表达式+. 这是不合法的。

您需要引用输入字符串才能在任何与正则表达式相关的操作中使用它,其中包括String's.replaceFirst().replaceAll()(但 .replace()包括...)。

因此,请执行以下操作:

final String re = Pattern.quote(token[0]);
expression = expression.replaceFirst(re, "");
于 2013-06-04T02:51:01.940 回答