先贴一下有问题的代码,看看坑具体在哪里。
public class TestSpilt { public static void main(String[] args) { String limiter = "$"; String str = "a" + limiter + "b" + limiter + "c"; String[] strs = str.split(limiter); for(int i=0; i<strs.length; i++){ System.out.println(strs[i]); } } }
看出来坑在哪里了吗
之前用spilt的方法,以为是根据指定的字符串进行拆分,所以随便定义了一个分割字符串。
实际上,在java API中,是这样定义的
public String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。
例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:
Regex 结果
: { "boo", "and", "foo" } o { "b", "", ":and:f" }
参数:
regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
可以看出传入的参数是正则表达式而不是字符串
而"+"、"?"、"\"、"*"、"^"、"."、"$"在正则表达式里都有特殊意义
所以最好不要用这些字符作为分隔符,或者在用的时候进行转义。