使用Java String.split() 分割时,分割字符为特殊字符需要特别注意。
要点:
1、首先JDK doc里已经说明,split的参数是regex,即正则表达式,而 +、*、| 等都是正则表达式中的特殊符号,所以都需要使用转义,即 “\\+”、“\\|”形式。
2、如果字符串中包含 "\",首先这个字符串中的"\"需要转义,即为"\\",用split时需要写成split("\\\\")。
示例代码:
import org.apache.commons.lang3.StringUtils; // StringUtils.split()
String str1="\\aaa\\bbb\\";
System.out.println(Arrays.toString(str1.split("\\\\"))); // [,aaa,bbb]
System.out.println(Arrays.toString(StringUtils.split(str1, "\\"))); // [aaa,bbb]
上述使用StringUtils.split()函数得到的结果显然更如人意,Java自带的split分割时,如果分隔符位于首位,则结果数组第一个会是空值,而尾部的分隔符却不会在数组最后添加一个空值。StringUtils包则解决了此问题,不会出现空值问题。