代码:
public void transferString(String str) {
//0.条件初始化
char[] cArr = str.toCharArray(); //将字符串转为字符数组处理
char[] flagArr = new char[cArr.length]; //字符数组标记,判断是否转换
for(int i = 0; i < flagArr.length; i++) { //字符数组初始为0
flagArr[i] = ‘0‘;
}
//1.循环遍历数组,每次处理一个或者一段字符串。
for(int i = 0; i < cArr.length - 1; ) {
//默认处理两个,如果不满足‘aa‘,则处理第一个,如果满足,则处理下面的一段字符
int len = 2;
boolean flag = true; //判断处理标识,为true表示转为b,为false表示不转
char a = cArr[i];
char b = cArr[i+1];
//判断处理
if(a == ‘a‘ && b == ‘a‘) {
//第一个和第二个都是a,判断后面的
int j = i + 2;
while(true) {
if(j == cArr.length) { //如果已经是最后两个字符,不再处理
break;
}
if(cArr[j] == ‘a‘) {//如果后面的也是‘a‘,则不进行转换
len += 1;
j++;
flag = false; //修改标记
} else {
break;
}
}
//处理数组标记
for(int k = i; k < i + len; k++) {
if(flag) {
flagArr[k] = ‘1‘;
} else {
flagArr[k] = ‘0‘;
}
}
i += len; //修改下标,处理下一段字符串
} else {
flagArr[i] = ‘0‘;
flag = false;
i++;
//如果是倒数第2元素
if(i == (cArr.length - 1)) {
if(flag) {
flagArr[flagArr.length - 1] = ‘1‘;
}
}
}
}
//对标记数组遍历,转换字符
for(int m = 0; m < flagArr.length; m++){
if(flagArr[m] == ‘1‘) {
cArr[m] = ‘b‘;
}
}
//打印,查看结果
System.out.println(str);
for(char c : cArr) {
System.out.print(c);
}
}
字符串转换:字符串中的'aa'转换成'bb',但是如果是'a'、'aaa'等,则不进行转换
原文:http://www.cnblogs.com/longchaoqun/p/4125291.html