面试时经常考的------对字符串的操作(三)

本文介绍并对比了六种不同的方法来从字符串中移除特定字符,包括使用字符数组、StringBuffer、StringBuilder以及正则表达式等,旨在帮助读者理解不同场景下选择合适方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
* 假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3“
*
*/

Code:
  1. //=======第一种方法======
  2. publicstaticvoidreplaceString(Stringstr){
  3. charmyChar[]=str.toCharArray();
  4. intlen=myChar.length;
  5. StringtempStr="";
  6. for(inti=0;i<len;i++){
  7. if('a'==myChar[i]||'b'==myChar[i]||'3'==myChar[i]){
  8. myChar[i]='';
  9. }
  10. Stringtemp="";
  11. temp=myChar[i]+"";
  12. tempStr+=temp.trim();
  13. }
  14. System.out.println(tempStr);
  15. }
  16. //=======第二种方法======
  17. publicstaticvoidreplaceString2(Stringstr){
  18. chars[]=str.toCharArray();
  19. intlen=str.length();
  20. charstring[]=newchar[14];
  21. StringBuffersb=newStringBuffer();
  22. for(inti=0;i<len;i++){
  23. if('a'!=s[i]&&'b'!=s[i]&&'3'!=s[i]){
  24. //string[i]=s[i];
  25. sb.append(s[i]);
  26. }
  27. //Stringtemp=null;
  28. //temp=string[i]+"";
  29. //sb.append(temp.trim());
  30. }
  31. System.out.println(sb.toString());
  32. }
  33. //=======第三种方法======
  34. publicstaticStringreplaceString3(Stringdes,Stringreg){
  35. StringBuilderbuf=newStringBuilder(des.length());
  36. char[]chars=des.toCharArray();
  37. char[]regchars=reg.toCharArray();
  38. for(charc:chars){
  39. booleanb=true;
  40. for(charregchar:regchars){
  41. if(c==regchar){
  42. b=false;
  43. break;
  44. }
  45. }
  46. if(b)
  47. buf.append(c);
  48. }
  49. returnbuf.toString();
  50. }
  51. //=======第四种方法======
  52. publicstaticvoidreplaceString4(Stringstr){
  53. //指定为字符串的正则表达式必须首先被编译为此类的实例
  54. Patternpattern=Pattern.compile("[^a|b|3]");//^非;边界匹配器"^"行的开头
  55. //然后,可将得到的模式用于创建Matcher
  56. //对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
  57. Matchermatcher=pattern.matcher(str);
  58. Stringtemp="";
  59. while(matcher.find()){
  60. temp+=matcher.group();//返回由以前匹配操作所匹配的输入子序列
  61. }
  62. System.out.println(temp);
  63. }
  64. //=======第五种方法======
  65. publicstaticvoidreplaceString5(Stringstr){
  66. StringBuffersb=newStringBuffer();
  67. Scannerscanner=newScanner(str);
  68. //匹配扫描
  69. scanner.findInLine("(//S*)ab(//S*)33(//S*)");
  70. //返回此扫描器所执行的最后扫描操作的匹配结果
  71. MatchResultms=scanner.match();
  72. for(inti=1;i<ms.groupCount();i++){//注意i的初始值
  73. sb.append(ms.group(i));
  74. }
  75. scanner.close();
  76. System.out.println(sb);
  77. }
  78. //=======第六种方法======
  79. publicstaticStringreplaceString6(Stringstr,StringtoRemove){
  80. boolean[]removeMap=newboolean[255];
  81. char[]originChars=str.toCharArray();
  82. char[]todoChars=toRemove.toCharArray();
  83. char[]destChars=null;
  84. intstrLen=0;
  85. //buildtoRemovecharsmap
  86. for(inti=0;i<todoChars.length;i++){
  87. removeMap[(todoChars[i]&0xFF)]=true;
  88. }
  89. for(inti=0;i<originChars.length;i++){
  90. if(removeMap[(originChars[i]&0xff)]){
  91. if(destChars==null){
  92. destChars=newchar[originChars.length-1];
  93. System.arraycopy(originChars,0,destChars,0,i);
  94. }
  95. }else{
  96. if(destChars!=null){
  97. destChars[strLen]=originChars[i];
  98. }
  99. strLen++;
  100. }
  101. }
  102. returndestChars==null?str:newString(destChars,0,strLen);
  103. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值