请实现一个函数,将一个字符串中的每个空格替换成“%20”。
##举例:
字符串为:We Are Happy.
则经过替换之后的字符串为:We%20Are%20Happy。
###Tips:
StringBuff用法:
####1.StringBuff的初始化:
StringBuffer s = new StringBuffer();
但是这样产生的是空对象需要在括号内添加所需内容,如:StringBuffer s = new StringBuffer("abd");
####2.StringBuff的用法:
A.append()方法,如:
StringBuffer sb = new StringBuffer(“abc”);
sb.append(true);
则对象sb的值将变成”abctrue”。
B.deleteCharAt()方法,如:
StringBuffer sb = new StringBuffer(“TestString”);
sb. deleteCharAt(1);
该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”
C.delete(int start,int end)方法,如:
StringBuffer sb = new StringBuffer(“TestString”);
sb. delete (1,4);
该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。
D.insert(int offset, boolean b)方法,如:
StringBuffer sb = new StringBuffer(“TestString”);
sb.insert(4,false);
该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。
E.reverse()方法,如:
StringBuffer sb = new StringBuffer(“abc”);
sb.reverse();
经过反转以后,对象sb中的内容将变为”cba”。
F.setCharAt(int index, char ch)方法,如:
StringBuffer sb = new StringBuffer(“abc”);
sb.setCharAt(1,’D’);
则对象sb的值将变成”aDc”。
G.trimToSize()方法,该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。
####3. String和StringBuffer的相互转换
`public class StringBufferTest {
public static void main(String[] args) { // String -- StringBuffer String s = "hello"; // StringBuffer sb = "hello"; //错误的,注意:不能把字符串的值直接赋值给StringBuffer // StringBuffer sb = s; //错误的 // 方式1:通过构造方法 StringBuffer sb = new StringBuffer(s); System.out.println("sb:" + sb); //sb:hello // 方式2:通过append()方法 StringBuffer sb2 = new StringBuffer(); sb2.append(s); System.out.println("sb2:" + sb2); //sb2:hello //--------------------------------------------------- // StringBuffer -- String StringBuffer buffer = new StringBuffer("java"); // String(StringBuffer buffer) // 方式1:通过构造方法 String str = new String(buffer); System.out.println("str:" + str); //str:java // 方式2:通过toString()方法 String str2 = buffer.toString(); System.out.println("str2:" + str2);//str2:java }
}`
###拓展(String,StringBuffer与StringBuilder的区别)
- String 字符串常量
- StringBuffer 字符串变量(线程安全)
- StringBuilder 字符串变量(非线程安全)
String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象.在大部分情况下 StringBuffer > String
##思路
1.将stringbuff类型str转换成string类型,再用其方法replaceAll()
2.是先将其转化为string类型后用toCharArray() 方法将字符串转换为字符数组在循环到空格后添加%20.
代码如下:
public class Solution { public String replaceSpace(StringBuffer str) { String s=str.toString(); s=s.replaceAll(" ","%20"); return s; } }
public class Solution { public String replaceSpace(StringBuffer str) { String str1=str.toString(); StringBuffer buffer=new StringBuffer(); char[] chars=str1.toCharArray(); for(int i=0;i<chars.length;i++){ if(chars[i]==' '){ buffer.append("%20"); }else{ buffer.append(chars[i]); } } return buffer.toString(); } }