切割字符串java

时间:2012-11-27 23:07:46

标签: java string split

我需要为我正在制作的算法剪切某些字符串。我正在使用substring(),但它太复杂了,实际上无法正常工作。我找到了这个话题how to cut string with two regular expression "_" and "."

并决定尝试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);

为什么我会遇到这个令人恼火的例外?

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

4 个答案:

答案 0 :(得分:3)

正则表达式中的

+具有特殊含义。要被视为正常角色,你应该用反斜杠来逃避它。

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

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

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

refer here about how characters work in regex

答案 1 :(得分:2)

+是一个正则表达量词(意思是一个或多个),所以需要在split方法中进行转义:

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

答案 2 :(得分:2)

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

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

因为,String.splitregex作为分隔符,而+是正则表达式中的元字符,这意味着匹配1 or more重复,因此使用时出错它在正则表达式中bare

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

答案 3 :(得分:2)

加号+符号在正则表达式中有意义,这就是split解析它的参数的方式。你需要regex-escape加号。

.split("\\+");