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

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

  1. python练习:假设s是一个字符串,返回s中十进制数字之和。例如,如果s是‘a2b3c’,则返回5。

    python练习:假设s是一个字符串,返回s中十进制数字之和.例如,如果s是‘a2b3c’,则返回5. 重难点:字符串转化为字符序列.in的多种应用.try-except代码块的使用. print(& ...

  2. Python 判断一个字符串是否在列表中任何一个字符串中出现过

    strlist = ['a1', 'a2', 'b1'] if any("a" in s for s in strlist):

  3. java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”

    在javascript中有一个方法isDigit()使用来判断一个字符串是否都是数字,在java的字符串处理方法中没有这样的方法,觉得常常需要用到,于是上网搜了一下,整理出了两个用正则表达式匹配的判断 ...

  4. Jquery 选择器 详解 js 判断字符串是否包含另外一个字符串

    Jquery 选择器 详解   在线文档地址:http://tool.oschina.net/apidocs/apidoc?api=jquery 各种在线工具地址:http://www.ostools ...

  5. String类练习统计一个字符串中大小写字母及数字字符个数

    public class StringPractice { public static void main(String[] args) { //创建一个文本扫描器 Scanner sc = new ...

  6. 如何判断/检查一个集合(List<string>)中是否有重复的元素

    问题描述 在.NET/C#应用程序编程开发中,如何判断一个字符串集合List<string>中是否有重复的元素? 假如有如下的List<string>集合: var lstNa ...

  7. C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符

    在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过的用于格式控制的成员 ...

  8. 读入一个字符串str,输出字符串str中连续最长的数字串

    要求: 读入一个长度不超过256的字符串,例如“abc123defg123456789hjfs123456”.要求输出“123456789” 思路: 遍历字符串,如果是数字串则计算往后一共有多少个数字 ...

  9. 算法:Manacher,给定一个字符串str,返回str中最长回文子串的长度。

    [题目] 给定一个字符串str,返回str中最长回文子串的长度 [举例] str="123", 1 str="abc1234321ab" 7 [暴力破解] 从左 ...

随机推荐

  1. 查看工程里有多少行java代码

    /** * @Classname CustBankcardServiceImpl * @Description 计算项目代码量(行数) * @Date 2019/11/04 14:24 * @Crea ...

  2. Ubuntu 下python开发环境的搭建

    一.安装python3 ubuntu自身是安装python2的,例如在ubuntu 16.04中安装的就是python2.7.但我想在python3的环境下进行开发所以就要安装python3.但由于u ...

  3. NodeJs的Event Loop

    我们之前谈过浏览器的Event Loop:https://www.cnblogs.com/amiezhang/p/11349450.html 简单来说,就是每执行一个宏任务,就去执行微任务队列,直到清 ...

  4. Codeforces Round #591 (Div. 2, based on Technocup 2020 Elimination Round 1)

    Virtual participate 的,D题不会做,打了1:30就打不动了,过了ABCE. A - CME 题意:? 题解:? void test_case() { int n; scanf(&q ...

  5. java实现哈夫曼树进行文件加解压

    目录 1.哈夫曼树简述 2.构造树的节点 3.构造哈夫曼树的类(压缩) 4.构造哈夫曼树的类(解压) 5.整体工程文件(包括测试类) 6.结果 7.参考链接 1.哈夫曼树简述 给定n个权值作为n个叶子 ...

  6. 用http请求thrift服务端出现了内存溢出的情况

    记一次内存溢出的分析经历 - Janti - 博客园 https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出 ...

  7. android: 使用android逆向助手反编译APK

    第一步:下载逆向助手:(链接: https://pan.baidu.com/s/15jtoFDg9LWV80HREeyx5HA 提取码: k527 ) 第二步:将apk文件拷贝到逆向助手的apktoo ...

  8. PHP 根据 IP 获取定位数据

    使用的工具 GEOIP 配置 在PHP中使用 使用的工具 GEOIP: 什么是GepIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息.这里面的技术 ...

  9. keras输出预测值和真实值

    在使用keras搭建神经网络时,有时需要查看一下预测值和真是值的具体数值,然后可以进行一些其他的操作.这几天查阅了很多资料.好像没办法直接access到训练时的数据.所以我们可以通过回调函数,传入新的 ...

  10. SQL-W3School-函数:SQL FIRST() 函数

    ylbtech-SQL-W3School-函数:SQL FIRST() 函数 1.返回顶部 1. FIRST() 函数 FIRST() 函数返回指定的字段中第一个记录的值. 提示:可使用 ORDER ...