【问题标题】:Why can't I check membership of characters in Strings?为什么我不能检查字符串中字符的成员资格?
【发布时间】:2015-08-19 19:07:20
【问题描述】:

我正在解决一个关于 spoj 的问题,它给出了一个表达式,我必须评估那个表达式。就像“7+5”是给定的表达式,我必须评估并打印 12。

这是我的代码

public class EXPR2 {
  public static void main(String arg[]) throws IOException {
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

    int t = Integer.parseInt(input.readLine());
    while (t-- > 0) {
      String expression = input.readLine();
      String[] components = new String[3];
      int ans = 0;
      if (expression.contains("+")) {
        components = expression.split("+");
        ans = Integer.parseInt(components[0]) + Integer.parseInt(components[1]);

      } else if (expression.contains("-")) {
        components = expression.split("-");
        ans = Integer.parseInt(components[0]) + Integer.parseInt(components[1]);

      } else if (expression.contains("*")) {
        components = expression.split("*");
        ans = Integer.parseInt(components[0]) * Integer.parseInt(components[1]);
      } else {
        components = expression.split("/");
        ans = Integer.parseInt(components[0]) / Integer.parseInt(components[1]);

      }
      System.out.println(ans);
    }
  }
}

但是,我遇到了异常:

Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^
    at java.util.regex.Pattern.error(Pattern.java:1955)
    at java.util.regex.Pattern.sequence(Pattern.java:2123)
    at java.util.regex.Pattern.expr(Pattern.java:1996)
    at java.util.regex.Pattern.compile(Pattern.java:1696)
    at java.util.regex.Pattern.<init>(Pattern.java:1351)
    at java.util.regex.Pattern.compile(Pattern.java:1028)
    at java.lang.String.split(String.java:2368)
    at java.lang.String.split(String.java:2410)
    at EXPR2.main(EXPR2.java:15)

怎么了?

【问题讨论】:

  • 在各种不同的输入上,它给出不同的行号。

标签: java regex string exception


【解决方案1】:

String.split 采用正则表达式,因此您必须使用 \\ 转义 +

例如:

String foo = "7+5";
System.out.println(Arrays.toString(foo.split("\\+")));

输出:

[7, 5]

在你的情况下,这将是:

components = expression.split("\\+");

【讨论】:

    【解决方案2】:

    String 的 spit 方法有正则表达式作为参数,所以你需要对任何正则表达式有意义的字符(+,*)进行转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      相关资源
      最近更新 更多