这是我的代码:
String mensaje = "/server###33+32";
String[] msg = mensaje.split("###");
String[] numeros = null;
if (msg[1].contains("+")){
numeros = msg[1].split("+"); <== ERROR HERE
}
这是我的异常错误:
Exception in thread "Thread-0" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.split(Unknown Source)
at java.lang.String.split(Unknown Source)
at juannmcc.servidor.Cliente.run(Cliente.java:49)
需要帮助因为我不知道如何对String []数组的String []数组进行拆分。 感谢。
答案 0 :(得分:2)
split
以正则表达式作为参数。 +
是一个正则表达量词字符,用于匹配一个或多个字符,因此需要进行转义才能按字面意思进行评估
numeros = msg[1].split("\\+");
答案 1 :(得分:1)
+
在正则表达式中有特殊含义,所以你必须逃脱它。试试这个:
numeros = msg[1].split("\\+ ");
答案 2 :(得分:1)
'+'字符是用于表达正则表达式的元字符。如果你想从字面上提到它,你需要逃避它。其他几个字符也是如此,例如'.', '*', '[', ']'
等。
if (msg[1].contains("+")){
numeros = msg[1].split("\\+"); // this should work
}
您可能希望阅读有关正则表达式的oracle's documentation以获取更多信息。
答案 3 :(得分:0)
您需要在正则表达式中转义+
。正则表达式中的+
用于表示“前面一个或多个元素”,并且您没有前面的元素,因此错误。
numeros = msg[1].split("\\+");
答案 4 :(得分:0)
如果您不想使用\\
,则另一种棘手的方式:
numeros = msg[1].split("[+]");