【问题标题】:Java split() a String made out of the String you are splitting with?Java split() 由要拆分的字符串组成的字符串?
【发布时间】:2013-04-04 16:20:39
【问题描述】:

当我编译并运行这段代码时:

class StringTest {
    public static void main(String[] args) {
        System.out.println("Begin Test");

        String letters = "AAAAAAA"
        String[] broken = letters.split("A");
        for(int i = 0; i < broken.length; i++)
            System.out.println("Item " + i + ": " + broken[i]);

        System.out.println("End Test");
    }
}

控制台的输出是:

Begin Test
End Test

谁能解释为什么split() 会这样工作?我在这里看到了一些类似这样的其他问题,但不完全理解为什么在拆分完全由您用于regex 的字符组成的字符串时没有输出。为什么java会这样处理字符串?

【问题讨论】:

  • 另一个注意事项是 Java 以一种模式对待 /A。例如,如果您按照此处所示设置 RegEx 模式。 ideone.com/W1sHLH,你会得到另一个有趣的输出。干杯
  • @SathishJayapal 哦,酷!谢谢。

标签: java regex string split


【解决方案1】:

String.split 丢弃尾随的空字符串。例如,"foo,bar,,".split(",") 被拆分为 {"foo", "bar"}。您看到的是一个完全由分隔符组成的字符串,因此所有空拆分都“尾随”并被丢弃。

如果您使用letters.split("A", -1),您可能会得到所有这些空字符串。或者,Guava'sSplitter 不会做类似的事情,除非你要求:Splitter.on('A').split(letters)

【讨论】:

  • 感谢您解决这个问题!我会尽可能接受答案:P
【解决方案2】:

这是因为 "A" 在 split 方法中用作分隔符,并且由于您的字符串中除了分隔符 "A" 之外没有任何其他文本,因此拆分后您将一无所有(在结果数组)。

【讨论】:

    【解决方案3】:

    由于输入中的每个字符都是分隔符,因此找到的每个字符串都是空白的。默认情况下,找到的每个尾随空白都会被忽略,因此您会看到。

    不过,split() 有两种风格。有一个second version of the split() 方法接受另一个int 参数limit,它控制要应用匹配的次数,以及忽略尾随空格的行为。

    如果limit 参数为负数,则保留尾随空格。

    如果你执行了这段代码:

    String letters = "AAAAAAA";
    String[] broken = letters.split("A", -1); // note the -1
    System.out.println(Arrays.toString(broken));
    

    你得到这个输出:

    {"", "", "", "", "", "", ""}
    

    请参阅javadoc 了解更多信息,包括各种limit 值如何影响行为的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多