zoukankan      html  css  js  c++  java
  • 给定一个字符串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可以敲出来,这是不熟练的原因吗?~~

  • 相关阅读:
    layui分页获取数据,回显checkbox
    批量选中 及下载
    Module Federation原理剖析
    EMP-面向未来微前端方案正式开源了!
    Vue3 也能用上 Vue2 组件 From EMP
    对比多种微前端方案
    EMP微前端之教你如何搭建共享站
    EMP微前端实战之cocos2d线上项目
    微前端是什么,可以带来什么收益
    Elasticsearch操作实践手册|建议收藏篇
  • 原文地址:https://www.cnblogs.com/once/p/3690102.html
Copyright © 2011-2022 走看看