题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
完整代码:
1)第一种方式:
public class Solution {
public static String replaceSpace(StringBuffer str) {
// int n =0;
// while(str.indexOf("",n)!=-1){
// n=str.indexOf("",n);//获得空格的索引
// str.deleteCharAt(n);//删除对应索引的空格
// str.insert(n,"%20");//在相应位置插入%20
// }
// return str.toString();
return str.toString().replaceAll(" ","%20");//将空格换成%20
}
public static void main(String []arg){
StringBuffer str = new StringBuffer("we are happy");
System.out.println(replaceSpace(str));
}
}
2)第二种方式:
public class Solution {
public static String replaceSpace(StringBuffer str) {
if(str==null){
return null;
}
StringBuilder newStr = new StringBuilder();
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
newStr.append('%');
newStr.append('2');
newStr.append('0');
}
else{
newStr.append(str.charAt(i));
}
}
return newStr.toString();
}
}
代码中用到的方法和类的说明:
1.replaceAll() 方法:replaceAll() 使用给定的参数 替换字符串所有匹配给定的正则表达式的子字符串。
返回值:成功则返回替换的字符串,失败则返回原始字符串。
2. StringBuilder()和StringBuffer():当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
3.append()方法:将指定的字符串追加到此字符序列。
4.toString()方法:返回此序列中数据的字符串表示形式。