【问题标题】:Why java String.split is ignoring last character is split is based on last character [duplicate]为什么java String.split 忽略最后一个字符被拆分是基于最后一个字符[重复]
【发布时间】:2017-11-17 19:14:20
【问题描述】:

如果我运行以下代码:

"testx".split("x")

我们期望得到{"test", ""},但java却返回{"test"}

但是"xtest".split("x") 返回{"", "test"}。任何想法为什么它的行为怪异(或)我有错误的理解?

这是我的 JDK 和系统信息:

JRE:1.8.0_152-release-1024-b6 amd64

JVM:JetBrains s.r.o 的 OpenJDK 64 位服务器虚拟机

Linux 4.4.0-34-通用

【问题讨论】:

    标签: java java-8 openjdk


    【解决方案1】:

    来自String.split 文档:

    这个方法的工作方式就像是通过调用两个参数的 split 方法 给定的表达式和零的极限参数。 尾随为空 因此字符串不包含在结果数组中。

    如果你想保留尾随的空字符串,那么你可以像这样使用String.split(String, int)

    String str = "testx";
    String[] values = str.split("x", -1);
    

    输出:

    {"test", ""}
    

    【讨论】:

    • 有没有办法强制 Java 不忽略 end empty 结果?
    • @Kalinga 再次阅读那段引用的文档,然后思考“如果我用一个非零的值作为限​​制参数调用双参数拆分方法会发生什么” i>(或查阅that method的文档)。
    • 使用str.split("x", -1)会更容易
    • @MarkRotteveel 你是对的。已编辑。
    • 当分隔符为空格字符“”时,为什么返回包含空格字符作为最后一个字符的字符串?例如: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
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多