【问题标题】:Java split() method strips empty strings at the end? [duplicate]Java split() 方法最后去除空字符串? [复制]
【发布时间】:2010-10-07 10:53:09
【问题描述】:

查看以下程序。

try {
    for (String data : Files.readAllLines(Paths.get("D:/sample.txt"))){
        String[] de = data.split(";");
        System.out.println("Length = " + de.length);
    }
} catch (IOException e) {
    e.printStackTrace();
}

示例.txt:

1;2;3;4 甲;乙;; a;b;c;

输出:

长度 = 4 长度 = 2 长度 = 3

为什么第二个和第三个输出给出 2 和 3 而不是 4。在sample.txt 文件中,第 2 行和第 3 行的条件是应该在给第三个字段的分隔符后立即给出换行符(\n 或输入)。谁能帮助我如何在不更改sample.txt 文件的条件的情况下将第二行和第三行的长度设为 4,以及如何打印de[2] 的值(抛出ArrayIndexOutOfBoundsException)?

【问题讨论】:

  • 好问题,但是:重复!并且缺少将答案标记为已接受

标签: java split


【解决方案1】:

看看docs,这里是重要的报价:

[...] the array can have any length, and trailing empty strings will be discarded.

如果您不喜欢这样,请查看 Fabian 的评论。当调用String.split(String) 时,它调用String.split(String, 0) 并丢弃尾随的空字符串(正如文档所说),当使用n < 0 调用String.split(String, n) 时它不会丢弃任何东西。

【讨论】:

    【解决方案2】:

    您可以指定尽可能频繁地应用该模式:

    String[] de = data.split(";", -1);
    

    See the Javadoc 表示使用两个参数获取详细信息的拆分方法。

    【讨论】:

    • 是的..我明白了..它现在工作正常。非常感谢..
    • 所以将答案标记为已接受。
    • 参数不应该为零,如Javadoc的最后两个示例所示?
    • 为什么当分隔符是空格字符“”时返回包含空格字符作为最后一个字符的字符串?例如:String s = "a "; public static int lengthOfLastWord(String s) { int l = 0; for(String eachWord : s.split("\\s+", -1)){ if(!eachWord.equals(" ")){ l = eachWord.length(); System.out.println("'" + eachWord + "'"); } } return l; } 返回 'a' 和 ' '。然而,如果 String s = "a a"; 则输出只是 'a' 后跟另一个 'a' 为什么在 Java 8 中会发生这种情况?
    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 2012-04-05
    • 2020-08-27
    • 1970-01-01
    • 2016-08-31
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多