2012-11-27 81 views
0

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

,并决定尝试用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

回答

3

+在正则表达式中有特殊的含义。被视为一个正常的字符,你应该用反斜杠来转义它。

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

以下是正则表达式中的metacharaters。对待任何一个正常的字符,你应该用反斜杠

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

refer here about how characters work in regex逃避它们。

2

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

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

你应该分裂您的字符串是这样的: -

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

因为,String.split需要regex作为分隔符,和+是正则表达式中的元字符,意思是匹配1 or more重复,所以在正则表达式中使用bare是错误的。

您可以在字符类中使用它来匹配+文字。因为在character class中,元字符和所有其他字符都有其特殊含义。只有hiephen(-)具有特殊含义,意思是range

2

+符号在正则表达式中有意义,split是如何解析它的参数的。你需要正则表达式 - 逃避加号角色。

.split("\\+");