java split函数报错

Posted Oh,L.E.D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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正则表达式的语法与示例

以上是关于java split函数报错的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. | Android Studio 降级 )(代码片段

错误记录Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. | Android Studio 降级 )(代码片段

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段

Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property(代码片段

Java split函数的坑

创建片段而不从 java 代码实例化它