字符串String input = "aabbbccdddef"
求一个正则表达式可以分割成数组'aa','bbb,'cc,'ddd,'e,'f'
之前我写的正则表达式是:String input = "aabbbccdddef";
String regex = "(?<!^)(?=(.)\\1+)";
String[] arr = input.split(regex);达不到效果,还有谁能提供下正则表达式
求一个正则表达式可以分割成数组'aa','bbb,'cc,'ddd,'e,'f'
之前我写的正则表达式是:String input = "aabbbccdddef";
String regex = "(?<!^)(?=(.)\\1+)";
String[] arr = input.split(regex);达不到效果,还有谁能提供下正则表达式
String regex = "(.)(?!\\1|$)";
String temp = input.replaceAll(regex, "$1,");
String[] arr = temp.split(",");
System.out.println(Arrays.toString(arr));
Matcher m=Pattern.compile("(\\w)\\1*").matcher("aabbbccdddef");
while(m.find())
System.out.println(m.group());
char[] chs=str.toCharArray();
int cnt=chs.length;
List<String> strList=new ArrayList<String>();
StringBuffer sb=new StringBuffer();
for(int i=0;i<cnt-1;i++){
sb.append(chs[i]);
if(chs[i]!=chs[i+1]){
strList.add(sb.toString());
sb.setLength(0);
}
if(i==cnt-2){
sb.append(chs[i+1]);
strList.add(sb.toString());
}
}
int size=strList.size();
String[] strs=new String[size];
for(int i=0;i<size;i++){
strs[i]=strList.get(i);
}
return strs;
}
public static void main(String[] args) {
String input = "aabbbccdddef";
System.out.println(Arrays.toString(getStringArray(input) ));
}
String regex = "((.)+?)(?!\\2)";
String temp = input.replaceAll(regex, "$1,");
String[] arr = temp.split(",");
System.out.println(java.util.Arrays.toString(arr));
但是,用这种regex,String input = "aabbbccdddef"
会分割成'aa','bb','cc','d','d','ddef'.
因为,用(?...)系列的,是用'空隙'来匹配的,所以我觉得不会把input里
的单字给吃掉。
我觉着,这个正则regex应该可以直接写出来,可是我没那水平啊。
哈哈,不知道,我说清楚了没有。
谢谢5楼的思路。
String regex = "(.)(?!\\1|$)";
String temp = input.replaceAll(regex, "$1,");
String[] arr = temp.split(",");
System.out.println(Arrays.toString(arr));
这个答案不错
用的也是(?!......) (?=......)。 private static void main(String[] args) {
String input = "ADogIsEatingPork";
String regex = "(?<!^)(?=[A-Z])";
String[] s = input.split(regex); for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}这个输出结果就是A
Dog
Is
Eating
Pork
1.环视的话,不能是动态的值?
2.我的思路是,某个空隙处 (|代表空隙),
.....(Y)|(X)\1
即后面的值要和前面的内容一致(所以用\1反向亦农),
但同时确保,空隙前面的值(即Y值)和X值又要不同。
所以写了如下思路的一个表达式(不能实现功能)
(?<!^)(?=(.)\\1+)(?<!\\1)
这样确保String input = "aabbbccdddef"
可以分割成数组'aa','bbb,'cc,'ddd,'e,'f'。
不知道,我这个思路对不对?
String str = "aabbbccdddef";
String arr[] = str.split("(?<=(\\w))(?!\\1)");
System.out.println(java.util.Arrays.toString(arr));今天忽然发现,貌似这样也可以