Java:围绕“+”拆分字符串

时间:2018-05-18 19:50:17

标签: java regex string split nullpointerexception

刚刚发现,当我试图在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

8 个答案:

答案 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)

阿普米特打败了我。 string.split()以正则表达式作为参数。在正则表达式+是一个特殊的符号。用反斜杠逃脱它。然后,因为它是一个java字符串,用另一个反斜杠转义反斜杠,所以得到\ +。尝试在在线正则表达式测试器上测试正则表达式。