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

发布于 2025-01-11 13:50:59 字数 259 浏览 0 评论 0原文

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]);
    }
}

我正在使用 java 8。

预期输出是 3

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]);
    }
}

I am using java 8.

the expected output is 3.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤独患者 2025-01-18 13:50:59

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

.split(Pattern.quote(".")) 将处理它。

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

The argument to split is a regular expression, not a literal 'this is the string you should scan for'. The . symbol in regex means 'anything', so it's like " ".split(" ") - the string you're passing is all separators, hence, you get no output.

.split(Pattern.quote(".")) will take care of it.

EDIT: To go in some detail - given that the string consists of all separators, split initially provides you with an array filled with empty strings; one for each position 'in between' any character (as each character is a separator). However, by default split will strip all empty strings off of the end, hence you end up with a 0-length string array.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文