为什么这个 .split 会导致数组越界错误?

Nar*_*des 3 java arrays string split

public class test {
    public static void main(String[] args) {        
        String[] arr = {"0 1.2.3.4","a b.c.d.e"};
        System.out.println(arr[0].split(".")[2]);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用java 8。

预期输出是3

rzw*_*oot 7

的参数split正则表达式,而不是文字“这是您应该扫描的字符串”。正则表达式中的符号.意味着“任何东西”,所以它就像" ".split(" ")- 您传递的字符串都是分隔符,因此,您不会得到任何输出。

.split(Pattern.quote("."))会照顾它的。

编辑:要详细说明 - 考虑到字符串由所有分隔符组成, split 最初为您提供一个填充空字符串的数组;一个用于任何字符“之间”的每个位置(因为每个字符都是分隔符)。但是,默认情况下split会删除末尾的所有空字符串,因此最终会得到一个长度为 0 的字符串数组。

  • (或者,您也可以手动转义`"\\."`) (3认同)