问题描述
替换空格:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
输入:s = “We are happy.”
输出:“We%20are%20happy.”
解决方案
第一种,这种是我拿到题目就想到了的方法,直接调用replace()方法,一顿替换就完事了,后来发现不对劲,数组会出现越界的问题。
第二种,调用StringBuffer类,用里面的的一些方法对数组进行操作,最后输出数组。这种方法比较直观,但依旧不符合题意,会出现数组越界的问题。
第三种,先定义一个数组,长度为原字符串的三倍,然后定义一个变量,遍历数组,每当遇到一个空格,变量自增3,遇到字符就进行输出,最后把数组转换为字符串。
代码
String s = "We are happy.";
//第一种方法
s=s.replace(" ","%20");
System.out.println(s);
//第二种方法
StringBuffer sb= new StringBuffer();
for(int i = 0 ; i < s.length(); i++){
char c = s.charAt(i);
if(c == ' ') {
sb.append("%20");
}
else {
sb.append(c);
}
}
System.out.println(sb);
//第三种方法
int i = s.length();
int nums = 0;
char[] arr = new char[i*3];
for (int l=0;l<i;l++){
char c = s.charAt(l);
if (c==' '){
nums += 3;
arr[--nums] = '0';
arr[--nums] = '2';
arr[--nums] = '%';
nums += 3;
}else{
arr[nums] = c;
nums +=1;
}
}
s = String.valueOf(arr);
System.out.println(s);
总结
第一种方法不符合题意不说,第二种和第三种方法,在思路上基本是一致的,都是先定位空格,然后进行转换,但在操作的顺序上有很大的不同。第二种方法并没有注意数组的长的,很容易出现数组越界的问题,而第三种方法事先定义了数组的三倍长度(定义三倍长的原因是因为如果字符串里全是空格,那么转换之后的长度就是原长的三倍),让后让变量自增,最后转化为字符串。