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,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。