一:程序的主题
1.题目
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2.我的程序
1 package com.jianke.it; 2 3 public class ReplaceSpace { 4 5 public static void main(String[] args) { 6 StringBuffer str=new StringBuffer("We Are Happy"); 7 String result=replaceSpace(str); 8 System.out.println(result); 9 }10 public static String replaceSpace(StringBuffer str) {11 StringBuffer str2=new StringBuffer();12 int len=str.length();13 for(int i=0;i
3.效果
4.程序二
问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!
问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。
从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
结论:我的方法是新开辟了一个字符串,这个方法是在原有的基础上进行修改。
1 package com.jianke.it; 2 3 public class ReplaceSpace { 4 5 public static void main(String[] args) { 6 StringBuffer str=new StringBuffer("We Are Happy"); 7 String result=replaceSpace(str); 8 System.out.println(result); 9 }10 public static String replaceSpace(StringBuffer str) {11 //spacenum为计算空格数12 int spacenum = 0;13 for(int i=0;i=0 && indexold
5.分析
1.&& indexold<newlength
主要分析一下这个条件,如果不要也不会由问题,但是,现在为什么还要加。
我思考了一下,是这样的:
如果,后面的空格已经补充完了之后,这个时候的indexold与indexnew已经相同的,就不要再移动了,就可以降低时间复杂度。
2.注意点
要设置str的长度,不然会越界。
6.程序三
/*
思路
使用string中的正则表达式
*/
1 package com.jianke.it; 2 3 public class ReplaceSpace { 4 5 public static void main(String[] args) { 6 StringBuffer str=new StringBuffer("We Are Happy"); 7 String result=replaceSpace(str); 8 System.out.println(result); 9 10 }11 public static String replaceSpace(StringBuffer str) { 12 return str.toString().replaceAll("\\s", "%20");13 }14 15 }
7.分析
\s在正则里就表示空白符
用\\s是因为所使用的工具\本身就具有转义的功能,比如\b表示退格符,在正则中\b(不在中括号中)表示单词边界,要将字符串\b传给正则就得首先对\转义 ,用\\表示 \, \\b表示\b 同理在这些\本身具有转义作用的工具中,要将字符串\s传给正则用要\\s
下面的方式也可以:
1 return str.toString().replaceAll(" ", "\\%20");2 return str.toString().replaceAll(" ", "%20");
二:补充知识
1.StringBuffer与StringBuilder
StringBuffer 和 StringBuilder 长度可变
StringBuffer 线程安全 StringBuilder 线程不安全,因此StringBuilder 速度快
2.StringBuffer比String多的独特方法
3.在StringBuffer中常用的还有下面的方法
void setLength(int newLength):设置str的长度
void setCharAt(int index, char ch):将index处设置为ch
char charAt(int index):返回str中index处的char值