刚刚发现,当我试图在NullPointerException
周围拆分一个字符串时,我得到一个+
,但是如果我分开-
或其他任何东西(并且改变字符串也是如此)当然),它运作得很好。
String string = "Strg+Q";
String[] parts = string.split("+");
String part1 = parts[0]; //Strg
String part2 = parts[1]; //Q
很想听听你们的意见,我做错了什么!
这个有效:
String string = "Strg-Q";
String[] parts = string.split("-");
String part1 = parts[0]; //Strg
String part2 = parts[1]; //Q
答案 0 :(得分:3)
由于+
是您regex
所需的特殊escape
语法之一。
使用
String[] parts = string.split("\\+");
而不是
String[] parts = string.split("+");
答案 1 :(得分:2)
这是因为+
是正则表达式中的特殊字符 - 它是匹配一个或多个量词。
你唯一需要做的就是逃避它:
String[] parts = string.split("\\+");
答案 2 :(得分:2)
String.split(...)需要一个正则表达式和' +'是一个特殊的角色。尝试:
String string = "Strg+Q";
String[] parts = string.split("[+]");
String part1 = parts[0]; //Strg
String part2 = parts[1]; //Q
答案 3 :(得分:2)
试试这个:
final String string = "Strg+Q";
final String[] parts = string.split("\\+");
System.out.println(parts[0]); // Strg
System.out.println(parts[1]); // Q
答案 4 :(得分:2)
正如其他人所说,' +'在处理正则表达式时很特别。通常,如果角色很特殊,您可以使用Pattern.quote()
来逃避它,以及"\\+"
。关于模式的文档:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
示例:
String string = "Strg-Q";
String[] parts = string.split(Pattern.quote("+"));
String part1 = parts[0]; //Strg
String part2 = parts[1]; //Qenter code here
请记住从java.util.regex
导入模式!
答案 5 :(得分:1)
+
是一个特殊的正则表达式字符,这意味着您需要将其转义才能将其用作普通字符。
String[] parts = string.split("\\+");
答案 6 :(得分:1)
你遇到的问题是"+"
是Java中的元字符,所以你需要" scape"它使用"\\+"
。
答案 7 :(得分:1)