Java split()由要拆分的字符串组成的字符串?

Java split()由要拆分的字符串组成的字符串?,java,regex,string,split,Java,Regex,String,Split,当我编译并运行此代码时: 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++)

当我编译并运行此代码时:

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");
    }
}
String letters = "AAAAAAA";
String[] broken = letters.split("A", -1); // note the -1
System.out.println(Arrays.toString(broken));

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

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


如果使用
letters.split(“A”,-1)
,可能会得到所有这些空字符串。或者,除非您要求,否则不要这样做:
Splitter.on('A').split(字母)
,这是因为在split方法中,
“A”
被用作分隔符,并且由于您的字符串中除了分隔符
“A”
之外没有任何其他文本,所以在分割之后,您将一无所获(结果数组中不会返回空字符串)。

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

但是,
split()
有两种风格。有一种方法可以接受另一个
int
参数
limit
,它控制应用匹配的次数,但也可以忽略尾随空格的行为

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

如果执行此代码:

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");
    }
}
String letters = "AAAAAAA";
String[] broken = letters.split("A", -1); // note the -1
System.out.println(Arrays.toString(broken));
您将获得以下输出:

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

有关更多信息,请参阅,包括各种
限制值如何影响行为的示例。

感谢您澄清这一点!如果可以,我会接受答案:另一个注意事项是模式中的Java treats/A。例如,如果您按此处所示设置正则表达式模式,您将获得另一个有趣的输出。,Cheers@SathishJayapal哦,太酷了脚踝。