替换空格
来源:互联网 发布:全网通网络解锁助手 编辑:程序博客网 时间:2024/06/03 01:59
剑指offer第四题,将空格替换为%20,一开始的实现
package com.zjy.sword2offer;public class SpaceReplace {public static String replace(String a){if(a==null||a.length()==0)return null;int count = 0;int originalLen = a.length();for(int i=0;i<originalLen;i++){if(a.charAt(i)==' ')count++;}int newLen = originalLen + count*2;int pOriginal = originalLen-1;int pNew = newLen-1;StringBuffer sb = new StringBuffer(newLen);while(pOriginal>=0 && pNew>pOriginal){if(a.charAt(pOriginal)!=' '){sb.insert(pNew--, a.charAt(pOriginal));}else{sb.insert(pNew-2, "%20");pNew -= 2;pNew--;}pOriginal--;}return sb.toString();}public static void main(String[] args) {// TODO Auto-generated method stubString str = "I am happy.";String res = replace(str);System.out.println(res);}}
一直报错如下
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExceptionat java.lang.System.arraycopy(Native Method)at java.lang.AbstractStringBuilder.insert(Unknown Source)at java.lang.StringBuffer.insert(Unknown Source)at com.zjy.sword2offer.SpaceReplace.replace(SpaceReplace.java:27)at com.zjy.sword2offer.SpaceReplace.main(SpaceReplace.java:44)
猜想出错的原因在于StringBuffer初始化后内容是空的,不能直接从后边用setCharAt()或者insert()插入数据,否则报错,后来换了一个方式ok了,如下
package com.zjy.sword2offer;public class SpaceReplace {public static String replace(String a){if(a==null||a.length()==0)return null;int count = 0;int originalLen = a.length();for(int i=0;i<originalLen;i++){if(a.charAt(i)==' ')count++;}int newLen = originalLen + count*2;int pOriginal = originalLen-1;int pNew = newLen-1;StringBuffer sb = new StringBuffer(newLen);while(pOriginal>=0 && pNew>=0){char ch = a.charAt(pOriginal);if(ch!=' '){sb.append(ch);}else{sb.append("02%");}pOriginal--;}return sb.reverse().toString();}public static void main(String[] args) {// TODO Auto-generated method stubString str = "I am happy.";String res = replace(str);System.out.println(res);}}
0 0
- 空格替换
- 替换空格
- 空格替换
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- 空格替换
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- HtmlHelper 添加扩展方法. 使用Lambda表达式作为参数
- 汉1号线汉口北延长线
- 观察者模式
- POJ 1006 代码 来找茬
- oracle截取最后一个字符
- 替换空格
- 快速排序
- 深入浅出TCP之send和recv
- 再超越去看正脸
- Linux多线程 基本概念
- 京东再不上市就老了
- Bing必应(Yahoo雅虎)搜索引擎登录网站 - Blog透视镜
- 装饰者模式
- Android开发之利用ViewPager实现导航页和滑动标签页效果