题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
此类题目,如果用java编写可以直接采用内置的替换函数
import java.util.Scanner; public class ReplaceSpace { public String replaceSpace(StringBuffer str) { String str2 = str.toString(); String strNew = str2.replace(" ", "%20");//替换字符 //String strNew = str2.replaceAll(" ", "%20");//正则表达式 return strNew; } public static void main(String[] args){ Scanner in = new Scanner(System.in); String str = in.nextLine(); ReplaceSpace a = new ReplaceSpace(); System.out.println(a.replaceSpace(new StringBuffer(str))); } }
没有问题,如果参考替换的源码,对于字符的替换:
string.java内的源码是:
public String replace(char oldChar, char newChar) { if (oldChar != newChar) { int len = value.length; int i = -1; char[] val = value; /* avoid getfield opcode */ while (++i < len) { if (val[i] == oldChar) { break; } } if (i < len) { char buf[] = new char[len]; for (int j = 0; j < i; j++) { buf[j] = val[j]; } while (i < len) { char c = val[i]; buf[i] = (c == oldChar) ? newChar : c; i++; } return new String(buf, true); } } return this; }
遍历一遍,直接替换,对于字符的替换,repalce函数是采用的字符匹配实现的。
我们可以采用此思路进行字符串替换。
首先要将字符串分割到String数组中去,然后直接遍历替换即可,整个过程遍历1遍,时间复杂度为O(n)
代码:
import java.util.Scanner; public class ReplaceSpace2 { public String replaceSpace(StringBuffer str) { String[] strArr = str.toString().split(""); str = new StringBuffer(); for(int i=0; i<strArr.length; i++){ if (strArr[i].equals(" ")) str.append("%20"); else str.append(strArr[i]); } return str.toString(); } public static void main(String[] args){ Scanner in = new Scanner(System.in); String str = in.nextLine(); ReplaceSpace2 a = new ReplaceSpace2(); System.out.println(a.replaceSpace(new StringBuffer(str))); } }