代码:
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'等,则不进行转换
时间: 2024-12-28 11:44:44