早晨刚翻出来,竟然可以用正则表达式实现。 其实可以用o(n)的时间复杂度加三四个变量直接搜索出来 final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab"; int length = str.length(); char temp = str.charAt(0); int start = 0; for(int i=1;i<length;i++) { //循环比较,如果在某个位置的字符不等于temp,那么就输出start-i的子串 if(temp != str.charAt(i)) { System.out.println(str.substring(start,i)); start = i; temp = str.charAt(i); } //特殊情况处理 if(i == length -1) { System.out.println(str.substring(start, length)); } } 正则的实现如下: final String str = "aaaabbbbbcccbbbbbd****$$$$$$$$$%%%%%%%%aaab"; String regex = "(?<=(//S))(?!//1)"; String []k = str.split(regex); for(int i = 0;i<k.length;i++){ System.out.println(k[i]); } regex的意思是在某个缝隙向前看,都是合法的非控制,非不可见字符,向后看呢, 和前面的不等。。。