0

我需要为我正在制作的算法剪切某些字符串。我正在使用substring(),但它太复杂了,实际上无法正常工作。我发现这个主题如何用两个正则表达式“_”和“。”剪切字符串

并决定尝试,split()但它总是给我

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^

所以这是我的代码:

     String[] result = "234*(4-5)+56".split("+");
      /*for(int i=0; i<result.length; i++)
      {
         System.out.println(result[i]);
      }*/
      Arrays.toString(result);

任何想法为什么我会得到这个恼人的异常?

PS如果我解决了这个问题,我会向您发布切割算法,然后是整个计算器的算法(因为我正在构建一个计算器)。这将是一个非常糟糕的计算器,我保证:P

4

4 回答 4

3

+在正则表达式中具有特殊含义。要被视为普通字符,您应该使用反斜杠对其进行转义。

  String[] result = "234*(4-5)+56".split("\\+");

以下是正则表达式中的元字符。要将它们中的任何一个视为普通字符,您应该使用反斜杠对其进行转义

 <([{\^-=$!|]})?*+.>

请参阅此处了解字符在 regex 中的工作方式

于 2012-11-27T23:09:25.897 回答
2

+是一个正则表达式量词(表示一个或多个),因此需要在split方法中转义:

String[] result = "234*(4-5)+56".split("\\+");
于 2012-11-27T23:09:09.763 回答
2

你应该像这样分割你的字符串: -

String[] result = "234*(4-5)+56".split("[+]");

因为,String.split以aregex作为分隔符,并且+是正则表达式中的元字符,表示匹配1 or more重复,所以在正则表达式中使用它是错误的bare

您可以在字符类中使用它来匹配+文字。因为在 中character class,元字符和所有其他字符失去了它们的特殊含义。仅hiephen(-)在其中具有特殊含义,即 a range

于 2012-11-27T23:09:17.830 回答
2

加号+在正则表达式中具有意义,这就是split解析它的参数的方式。您需要正则表达式转义加号字符。

.split("\\+");
于 2012-11-27T23:10:05.073 回答