Java 将字符串拆分为重复字符
我想将字符串“aaaabbbccccaadddcfggghhh”拆分为“aaaa”、“bbb”、“cccc”。“aa”、“dddd”、“c”、“f”等 我试过这个: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|$) (?试试这个
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");
}
}