还是一样,我们学习StringBuilder 之前先查一下一些定义,先做个简单的了解
首先就是创建Stringbuilder对象
StringBuilder sbuilder =new StringBuilder();
我们来做个简单的对比:连接字符串
StringBuilder
StringBuilder sbuilder=new StringBuilder();
sbuilder.append("abc");
sbuilder.append("def");
string str=sb.ToString();
String
string s1=“abc”;
string s2=“def”;
string str=s1+s2;
得到的结果相同,但在处理字符串比较多的的时候使用String效率会变低,而StringBuilder会更加适合,那么我们还是十分有必要去了解StringBuider的
大家想一下,String的连接方式我们知道了,上面也演示了StringBuilder的连接方式,好像和StringBuffer一样哦,对的确实是。
上面的StringBuilder对应的是StringBuilder的append(String str)/append(Char c)字符串连接方法
StringBuilder a=new StringBuilder("abc");
a.append('a');
a.append("aaaa");
System.out.println(a);
结果:abcaaaaa
那么我现在需要把得到的StringBuilder缓冲到Sting字符串中,那么我们就可以用到StringBuilder给我们提供的一个方法
toString():返回一个与构建起或缓冲器内容相同的字符串
StringBuilder a=new StringBuilder("abc");
a.append('a');
a.append("aaaa");
//我们的的结果是abcaaaaa
//我们现在给它进行一个缓冲
String as=a.toString();
System.out.println(a);
结果:abcaaaaa
不知道大家有没有看过庞博的吐槽,我明明是个卖肉夹馍的,你来跟我要一条狗,在这里我想说难不倒我
因为StringBuilder给我们提供了appendcodePoint(int cp):追加一个代码点,并将其转换为一个或两个代码单元并返回this
大家都知道char和int的对应关系,不知道的可以上网查一下哈
StringBuilder s = new StringBuilder("aaaaaa");
s.appendCodePoint(105);
System.out.println(s);
显示结果:aaaaaai
这里大家都打个问好?why?因为我们int(105)对应的char字符集是小写的i,所以appendCodePoint方法把105的字符集i添加到StringBuilder的尾部,返回的就是aaaaaai
那么有一个字符串aaabaaaaa,其中一个b好像不太合适,想把它换成a,额…,好像也可以哦
StringBuilder有个我们提供了一个方法setCharAt(int i, char c):我们可以把这个方法理解为替换,就是把指定位置的字符替换成自己想要的字符
上代码:
StringBuilder s = new StringBuilder("aaabaaaaa");
s.setCharAt(3,'a');
System.out.println(s);
显示结果:aaaaaaaaa
产品经理:这么叼,那你把那个b给我插回去
我:
不要担心,
StringBuilder的另一个方法派上用场了:
insert(int offset, String str)/insert(int offset, Char c):指定位置之前插入字符或者字符串,哈哈
上代码:
StringBuilder s = new StringBuilder("aaabaaaaa");
s.setCharAt(3,'a');
s.insert(3,'b');
System.out.println(s);
结果:aaabaaaaaa
经理:这里有个字符串,aaabcaaa,bc把它删了,多不美观
我:
这里调用下delete(int startIndex,int endIndex):注意第一个位置开始,第二个是结束,第一个参数包括开始的字符,第二个参数不包含哈
上代码:
StringBuilder s = new StringBuilder("aaabcaaa");
s.delete(3,5);
System.out.println(s);
结果:aaaaaa
String,StringBuilder对比
- string本身是不可改变的,它只能赋值一次,每一次改变,都会生成新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响。
- StringBuilder是可以改变的,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。StringBuilder的执行效率也是比较高。