码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer02

时间:2018-01-10 11:47:25      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:ati   happy   长度   pre   从后往前   遍历   ringbuf   stat   ret   

package jianzhiOffer; /*  * 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.  * 则经过替换之后的字符串为We%20Are%20Happy。  */ public class ch02 { public static void main(String[] args) { // String str = "We Are Happy"; // String newStr = myReplace("%20", " ", str); // System.out.println(newStr); StringBuffer sb = new StringBuffer("We Are Happy"); String str = replace(sb); System.out.println(str); } /*  * myReplace()方法使用java中提供的api replace()  */ public static String myReplace(String newStr,String oldStr,String str) { return str.replace(oldStr, newStr); } /*  * 不考虑java提供的api  * 我们可以从前往后替换,也可以从后往前替换,建议使用后者,  * 因为从前往后替换比从后往前替换,字符的移动次数要多很多,  * 字符在替换之后,字符串长度会发生变化,因此,我们首先计算出  * 替换之后字符串的长度,然后分别在旧字符串索引上和新字符串索引上  * 进行移动,判断是否为空格,进行相应的替换  */ public static String replace(StringBuffer str) { int spacenum = 0; for (int i = 0; i < str.length(); i++) { //计算空格数量 if(str.charAt(i) == ' ') { spacenum++; } } int indexOld = str.length() - 1; //旧字符串的最后一个索引位置 int indexNew = str.length() - 1 + spacenum * 2; //新字符串的最后一个索引位置 int lengthNew = str.length() + spacenum * 2; //新字符串的长度 str.setLength(lengthNew); //将旧字符串的长度重新设置 while(indexOld >= 0) { //遍历进行替换 if(str.charAt(indexOld) == ' ') { str.setCharAt(indexNew--, '0'); str.setCharAt(indexNew--, '2'); str.setCharAt(indexNew--, '%'); indexOld--; } else { str.setCharAt(indexNew--, str.charAt(indexOld--)); } } return str.toString(); } }


剑指offer02

标签:ati   happy   长度   pre   从后往前   遍历   ringbuf   stat   ret   

原文地址:http://blog.51cto.com/12222886/2059307

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!