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

如:
 a 不替换
 b 不替换
 ab 不替换
 ba 不替换
 aba 不替换
 aab 替换为 bbb
 baa 替换为 bbb
 abaabaaabaa 替换为 abbbbaaabbb 中间三个a不作替换

源代码如下ReplaceTest.java:

  1. package com.test.zhipengs;
  2.  
  3. /**
  4. * A Question
  5. * 给定一个字符串str,将str中连续两个字符为a的字符替换为b
  6. * 如:
  7. * a 不替换
  8. * b 不替换
  9. * ab 不替换
  10. * ba 不替换
  11. * aba 不替换
  12. * aab 替换为 bbb
  13. * baa 替换为 bbb
  14. * abaabaaabaa 替换为 abbbbaaabbb 中间三个a不作替换
  15. *
  16. * @author zhipengs
  17. *
  18. */
  19. public class ReplaceTest {
  20.  
  21. /**
  22. * main方法
  23. * @param args
  24. */
  25. public static void main(String[] args) {
  26. // 测试替换方法
  27. String str1 = "aachaadaaacaaaaaaaefgaa";
  28. System.out.println("-------------------------------");
  29. System.out.println("替换前:" + str1);
  30. System.out.println("替换后:" + replace(str1));
  31. String str2 = "aaachaadaaacaaaaaaaefgaaa";
  32. System.out.println("-------------------------------");
  33. System.out.println("替换前:" + str2);
  34. System.out.println("替换后:" + replace(str2));
  35. String str3 = "ajaayaaakaac";
  36. System.out.println("-------------------------------");
  37. System.out.println("替换前:" + str3);
  38. System.out.println("替换后:" + replace(str3));
  39. String str4 = "a";
  40. System.out.println("-------------------------------");
  41. System.out.println("替换前:" + str4);
  42. System.out.println("替换后:" + replace(str4));
  43. String str5 = "b";
  44. System.out.println("-------------------------------");
  45. System.out.println("替换前:" + str5);
  46. System.out.println("替换后:" + replace(str5));
  47. String str6 = "ab";
  48. System.out.println("-------------------------------");
  49. System.out.println("替换前:" + str6);
  50. System.out.println("替换后:" + replace(str6));
  51. String str7 = "ba";
  52. System.out.println("-------------------------------");
  53. System.out.println("替换前:" + str7);
  54. System.out.println("替换后:" + replace(str7));
  55. String str8 = "aa";
  56. System.out.println("-------------------------------");
  57. System.out.println("替换前:" + str8);
  58. System.out.println("替换后:" + replace(str8));
  59. String str9 = "aaa";
  60. System.out.println("-------------------------------");
  61. System.out.println("替换前:" + str9);
  62. System.out.println("替换后:" + replace(str9));
  63. String str10 = "kjgnknk";
  64. System.out.println("-------------------------------");
  65. System.out.println("替换前:" + str10);
  66. System.out.println("替换后:" + replace(str10));
  67. }
  68.  
  69. /**
  70. * 具体替换方法
  71. * @param str
  72. * @return String
  73. */
  74. private static String replace(String str) {
  75. int len = str.length();
  76. if (null == str || len <= 1) {// str为null或只有一个时直接返回
  77. return str;
  78. }
  79. char[] charArray = str.toCharArray();// 将str转为字符数组
  80. int num = 0;// 记录字符 a 的个数
  81. for (int i = 0; i < len; i++) {
  82. if ('a' == str.charAt(i)) {
  83. num++;
  84. } else {
  85. num = 0;// 一旦第i个字符不是 a 则num值立即清零
  86. }
  87. if ((num == 2 && (i + 1) < len && 'a' != charArray[i + 1])
  88. || (num == 2 && (i + 1) == len)) {// 下一个字符存在时num值为2且下一个字符不是a;遍历到字符串末尾即没有下一个字符了时num值为2即可
  89. charArray[i - 1] = 'b';// 把当前位置和上一个位置的字符a替换为b
  90. charArray[i] = 'b';
  91. }
  92. }
  93. return new String(charArray);// 返回结果
  94. }
  95.  
  96. }

测试结果输出如下:

-------------------------------
替换前: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. Vue.js-组件化前端开发新思路

    Vue.js-组件化前端开发新思路 12017.04.14 18:31:25字数 6228阅读 5632 本文章是我最近在公司的一场内部分享的内容.我有个习惯就是每次分享都会先将要分享的内容写成文章. ...

  2. 057_统计 Linux 进程相关数量信息

    #!/bin/bashrunning=0sleeping=0stoped=0zombie=0 #在 proc 目录下所有以数字开始的都是当前计算机正在运行的进程的进程 PID#每个 PID 编号的目录 ...

  3. Gym - 101981E 思维

    Gym - 101981EEva and Euro coins 题意:给你两个长度皆为n的01串s和t,能做的操作是把连续k个相同的字符反转过来,问s串能不能变成t串. 一开始把相同的漏看了,便以为是 ...

  4. PHP sha1()函数

    <!DOCTYPE html> <html> <body> <?php $str = "dashu"; echo sha1($str); ...

  5. 实现一个简单的Tomcat

    实现一个简单的Tomcat 1. Tomcat作用 我们的web应用会运行在Tomcat中,那么显然请求必定是先到达Tomcat的,Tomcat对于请求实际上会进行如下的处理: 提供Socket服务: ...

  6. [游戏开发]imgui介绍

    创建窗口 ImGui::Begin("Hello, world!"); ImGui::End(); 其中, ImGui::Begin("Hello, world!&quo ...

  7. PorterDuffXfermode的模式取值

    PorterDuffXfermode(Mode mode) PorterDuff.mode.XXX取值有: 1.PorterDuff.Mode.CLEAR 所绘制不会提交到画布上. 2.PorterD ...

  8. FlowLayout实现

    package com.loaderman.customviewdemo; import android.content.Context; import android.util.AttributeS ...

  9. Django学习笔记009-django models进行数据库增删查改

    引入models的定义 from app.models import  myclass class  myclass(): aa =  models. CharField (max_length=No ...

  10. Spring Cloud Eureka集群部署到Linux环境

    还是三板斧:先改配置文件,支持集群,然后出包,上传到linux环境(3个节点),最后启动jar包跑起来. 1.在原eureka服务端代码(参见Greenwich.SR2版本的Spring Cloud ...