Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串拆分为重复字符_Java_Regex_String_Split - Fatal编程技术网

Java 将字符串拆分为重复字符

Java 将字符串拆分为重复字符,java,regex,string,split,Java,Regex,String,Split,我想将字符串“aaaabbbccccaadddcfggghhh”拆分为“aaaa”、“bbb”、“cccc”。“aa”、“dddd”、“c”、“f”等 我试过这个: String[] arr = "aaaabbbccccaaddddcfggghhhh".split("(.)(?!\\1)"); 但是这会消耗掉一个字符,所以使用上面的正则表达式,我得到“aaa”,而我希望它作为第一个字符串是“aaaa” 如何实现这一点?如何在“后视”中捕获 (?<=(.))(?!\1|$) (?试试这个

我想将字符串“aaaabbbccccaadddcfggghhh”拆分为“aaaa”、“bbb”、“cccc”。“aa”、“dddd”、“c”、“f”等

我试过这个:

String[] arr = "aaaabbbccccaaddddcfggghhhh".split("(.)(?!\\1)");
但是这会消耗掉一个字符,所以使用上面的正则表达式,我得到“aaa”,而我希望它作为第一个字符串是“aaaa”


如何实现这一点?

如何在“后视”中捕获

(?<=(.))(?!\1|$)
(?试试这个:

String   str = "aaaabbbccccaaddddcfggghhhh";
String[] out = str.split("(?<=(.))(?!\\1)");

System.out.println(Arrays.toString(out));
=> [aaaa, bbb, cccc, aa, dddd, c, f, ggg, hhhh]
String str=“aaaabbbccccaadddcfggghhh”;

String[]out=str.split((?这里,我提取每个字符,并检查if循环中的两个条件,即字符串不能超过长度,如果下一个字符不等于第一个字符,则继续for循环,否则请提取新行并打印它。

for (int i = 0; i < arr.length; i++) {
    char chr= arr[i];
    System.out.print(chr);
    if (i + 1 < arr.length && arr[i + 1] != chr) {
        System.out.print(" \n");
    }
}
for(int i=0;i
@Adri1du40:我对其他选项持开放态度,但不想使用循环。检查这个问题:我不是Java爱好者,但不会
string.split()
比循环慢?@AmalMurali的可读性也会降低。我不知道你的情况,但阅读这个正则表达式
(?可能是@T.J.Crowder的副本。为什么你认为它不起作用?@Reimeus:因为我复制并粘贴了它而没有进行转义。我真希望Java有正则表达式文字。:-)您的解决方案非常有效。请您解释一下这个正则表达式。它是如何工作的。为了得到一个高质量的答案,@Shiva您可以在您的答案中添加一些解释,说明代码是如何实现作者试图实现的目标的吗?我改进了answer@pczeus
for (int i = 0; i < arr.length; i++) {
    char chr= arr[i];
    System.out.print(chr);
    if (i + 1 < arr.length && arr[i + 1] != chr) {
        System.out.print(" \n");
    }
}