java split函数报错

执行如下的代码

public class App {
	public static void main(String[] args) {
		String str = "123+456+712";
		String[] strings = str.split("+");
		System.out.println(Arrays.toString(strings));
	}
}

抛出异常

Exception in thread "main" 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.(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 zx.test.App.main(App.java:12)

出现这种情况的原因是因为String类的分割方法split接受的参数是一个正则表达式,而+这个字符是正则表达式的元字符,需要进行转义,不然就会抛出异常。String类的split方法如下。

public String[] split(String regex) {
    return split(regex, 0);
}

java的正则中的转义使用\,因此修改之。\++从元字符转换成普通的+字符。

public class App {
	public static void main(String[] args) {
		String str = "123+456+712";
		String[] strings = str.split("\+");
		System.out.println(Arrays.toString(strings));
	}
}

参考

读懂正则表达式就这么简单
Java正则表达式的语法与示例

原文地址:https://www.cnblogs.com/ZiYangZhou/p/8306790.html