标签: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(); } }标签:ati happy 长度 pre 从后往前 遍历 ringbuf stat ret
原文地址:http://blog.51cto.com/12222886/2059307