Java split字符串分割问题

Java使用split分割字符串时需要注意如下问题

1. 分隔符使用特殊字符

String str = "1|2|3|4";
String[] arr = str.split("\\|");
System.out.println(Arrays.toString(arr));

jdk doc中说明

public String[] split(String regex)

Splits this string around matches of the given regular expression. 

参数regex是一个regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果:

1) 用竖线 | 分隔字符串,你将得不到预期的结果。

2) 用 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。

显然,| + * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的字符串结果。

"|" 分隔串时虽然能够执行,但是却不是预期的目的,得到的是每个字符的分割,而不是字符串,"\\|"转义后即可得到正确的字符串结果。


2. split丢失结尾空字符串的问题

String str = "1||3|";
String[] arr = str.split("\\|");

这样得到的字符串的长度为3,结尾的空字符串被丢弃了。

使用该函数的另外一个重载方法

String str = "1|2|3|";
String[] arr = str.split("\\|", -1);

public String [] split (String  regex, int limit) 看下说明

limit参数控制模式应用的次数,因此影响所得数组的长度。

如果该限制n大于0,则模式将被最多应用n-1次,数组的长度将不会大于n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。

如果n为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。

如果n为0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。


发布了45 篇原创文章 · 获赞 21 · 访问量 66万+

猜你喜欢

转载自blog.csdn.net/yin_jw/article/details/43936679