给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)

需求:给定一个字符串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可以敲出来,这是不熟练的原因吗?~~

posted @ 2014-04-25 21:20  知了小巷  阅读(2161)  评论(0编辑  收藏  举报