我需要为我正在制作的算法剪切某些字符串。我正在使用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
答案 0 :(得分:3)
+
具有特殊含义。要被视为正常角色,你应该用反斜杠来逃避它。
String[] result = "234*(4-5)+56".split("\\+");
以下是正则表达式中的元标记。要将它们中的任何一个视为普通字符,您应该使用反斜杠将其转义
<([{\^-=$!|]})?*+.>
答案 1 :(得分:2)
+
是一个正则表达量词(意思是一个或多个),所以需要在split
方法中进行转义:
String[] result = "234*(4-5)+56".split("\\+");
答案 2 :(得分:2)
你应该像这样分割你的字符串: -
String[] result = "234*(4-5)+56".split("[+]");
因为,String.split
将regex
作为分隔符,而+
是正则表达式中的元字符,这意味着匹配1 or more
重复,因此使用时出错它在正则表达式中bare
。
您可以在字符类中使用它来匹配+
字面值。因为在character class
中,元字符和所有其他字符都失去了它们的特殊含义。只有hiephen(-)
具有特殊含义,即range
。
答案 3 :(得分:2)
加号+
符号在正则表达式中有意义,这就是split
解析它的参数的方式。你需要regex-escape加号。
.split("\\+");