需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)
如:
a 不替换
b 不替换
ab 不替换
ba 不替换
aba 不替换
aab 替换为 bbb
baa 替换为 bbb
abaabaaabaa 替换为 abbbbaaabbb 中间三个a不作替换
源代码如下ReplaceTest.java:
package com.test.zhipengs; /** * A Question * 给定一个字符串str,将str中连续两个字符为a的字符替换为b * 如: * a 不替换 * b 不替换 * ab 不替换 * ba 不替换 * aba 不替换 * aab 替换为 bbb * baa 替换为 bbb * abaabaaabaa 替换为 abbbbaaabbb 中间三个a不作替换 * * @author zhipengs * */ public class ReplaceTest { /** * main方法 * @param args */ public static void main(String[] args) { // 测试替换方法 String str1 = "aachaadaaacaaaaaaaefgaa"; System.out.println("-------------------------------"); System.out.println("替换前:" + str1); System.out.println("替换后:" + replace(str1)); String str2 = "aaachaadaaacaaaaaaaefgaaa"; System.out.println("-------------------------------"); System.out.println("替换前:" + str2); System.out.println("替换后:" + replace(str2)); String str3 = "ajaayaaakaac"; System.out.println("-------------------------------"); System.out.println("替换前:" + str3); System.out.println("替换后:" + replace(str3)); String str4 = "a"; System.out.println("-------------------------------"); System.out.println("替换前:" + str4); System.out.println("替换后:" + replace(str4)); String str5 = "b"; System.out.println("-------------------------------"); System.out.println("替换前:" + str5); System.out.println("替换后:" + replace(str5)); String str6 = "ab"; System.out.println("-------------------------------"); System.out.println("替换前:" + str6); System.out.println("替换后:" + replace(str6)); String str7 = "ba"; System.out.println("-------------------------------"); System.out.println("替换前:" + str7); System.out.println("替换后:" + replace(str7)); String str8 = "aa"; System.out.println("-------------------------------"); System.out.println("替换前:" + str8); System.out.println("替换后:" + replace(str8)); String str9 = "aaa"; System.out.println("-------------------------------"); System.out.println("替换前:" + str9); System.out.println("替换后:" + replace(str9)); String str10 = "kjgnknk"; System.out.println("-------------------------------"); System.out.println("替换前:" + str10); System.out.println("替换后:" + replace(str10)); } /** * 具体替换方法 * @param str * @return String */ private static String replace(String str) { int len = str.length(); if (null == str || len <= 1) {// str为null或只有一个时直接返回 return str; } char[] charArray = str.toCharArray();// 将str转为字符数组 int num = 0;// 记录字符 a 的个数 for (int i = 0; i < len; i++) { if ('a' == str.charAt(i)) { num++; } else { num = 0;// 一旦第i个字符不是 a 则num值立即清零 } if ((num == 2 && (i + 1) < len && 'a' != charArray[i + 1]) || (num == 2 && (i + 1) == len)) {// 下一个字符存在时num值为2且下一个字符不是a;遍历到字符串末尾即没有下一个字符了时num值为2即可 charArray[i - 1] = 'b';// 把当前位置和上一个位置的字符a替换为b charArray[i] = 'b'; } } return new String(charArray);// 返回结果 } }
测试结果输出如下:
-------------------------------
替换前:aachaadaaacaaaaaaaefgaa
替换后:bbchbbdaaacaaaaaaaefgbb
-------------------------------
替换前:aaachaadaaacaaaaaaaefgaaa
替换后:aaachbbdaaacaaaaaaaefgaaa
-------------------------------
替换前:ajaayaaakaac
替换后:ajbbyaaakbbc
-------------------------------
替换前:a
替换后:a
-------------------------------
替换前:b
替换后:b
-------------------------------
替换前:ab
替换后:ab
-------------------------------
替换前:ba
替换后:ba
-------------------------------
替换前:aa
替换后:bb
-------------------------------
替换前:aaa
替换后:aaa
-------------------------------
替换前:kjgnknk
替换后:kjgnknk
总结:一支笔一页白纸总是写不出类似的代码,但用键盘+IDE可以敲出来,这是不熟练的原因吗?~~