关于JAVA split()函数不能正确分割导致数组越界的问题

关于JAVA split()函数不能正确分割导致数组越界的问题

今天在调试代码的时候总是报数组越界,根据错误提示发现是split()函数不能正常的分割字符串导致的,于是就在split()前加了一个contains()函数判断是否存在可分割的字符,完成之后运行,结果还是报了数组越界。为了找到原因,写了如下测试代码。

public static void main(String[] args) {
    String a = "ABC+ERT+QWE";
    String key = "C+E";
    System.out.println(a.contains(key));
    String[] ans = a.split(key);
    for (String s : ans){
        System.out.println(s);
    }
}

这串代码应该会把字符串a分割成"AB""RT+QWE"
但是运行结果如下

true
ABC+ERT+QWE

可以看到split()并没有把字符串a分割为我们所期望的格式。
重新检查代码后发现分割字符中存在一个特殊字符+,联想到相似的正则运算符,初步判断split()函数可能是支持正则表达式的,为了验证猜想,修改了一下代码:

public static void main(String[] args) {
    String a = "ABC+ERT+QWE";
    String key = ".\\+.";
    System.out.println(a.contains(key));
    String[] ans = a.split(key);
    for (String s : ans){
        System.out.println(s);
    }
}

将分割字符串改为了正则表达式.+.,匹配加号两边有非空字符的式子,运行结果如下:

false
AB
R
WE

可以看到字符串被成功的分割了!而且是满足正则表达式的,但是可以发现contains()函数从ture变为了false

总结

  1. split() 是一个支持正则表达式的函数,在分割具有正则运算符的字符串时,需要在正则运算符前加上转义符\
public static void main(String[] args) {
    String a = "ABC+ERT+QWE";
    String key = "C\\+E";
    System.out.println(a.contains(key));
    String[] ans = a.split(key);
    for (String s : ans){
        System.out.println(s);
    }
}

运行结果:

false
AB
RT+QWE
  1. contains()是不支持正则表达式的,使用时请注意!

你可能感兴趣的:(java)