1700442760
1700442761
看到没,整个append方法都在做字符数组处理,加长,然后数组拷贝,这些都是基本的数据处理,没有新建任何对象,所以速度也就最快了!注意:例子中是在最后通过StringBuffer的toString返回了一个字符串,也就是说在5万次循环结束后才生成了一个String对象。
1700442762
1700442763
三者的实现方法不同,性能也就不同,但并不表示我们一定要使用StringBuilder,这是因为“+”非常符合我们的编码习惯,适合人类阅读,两个字符串拼接,就用加号连一下,这很正常,也很友好,在大多数情况下我们都可以使用加号操作,只有在系统性能临界(如在性能“增之一分则太长”的情况下)的时候才可以考虑使用concat或append方法。而且,很多时候系统80%的性能是消耗在20%的代码上的,我们的精力应该更多的投入到算法和结构上。
1700442764
1700442765
注意 适当的场景使用适当的字符串拼接方式。
1700442766
1700442767
1700442768
1700442769
1700442771
编写高质量代码:改善Java程序的151个建议 建议57:推荐在复杂字符串操作中使用正则表达式
1700442772
1700442773
字符串的操作,诸如追加、合并、替换、倒序、分割等,都是在编码过程中经常用到的,而且Java也提供了append、replace、reverse、split等方法来完成这些操作,它们使用起来也确实方便,但是更多的时候,需要使用正则表达式来完成复杂的处理,我们来看一个例子:统计一篇文章中英文单词的数量,很简单吧?代码如下:
1700442774
1700442775
public static void main(String[]args){
1700442776
1700442777
//接收键盘输入
1700442778
1700442779
Scanner input=new Scanner(System.in);
1700442780
1700442781
while(input.hasNext()){
1700442782
1700442783
String str=input.nextLine();
1700442784
1700442785
//使用split方法分隔后统计
1700442786
1700442787
int wordsCount=str.split(””).length;
1700442788
1700442789
System.out.println(str+“单词数:”+wordsCount);
1700442790
1700442791
}
1700442792
1700442793
}
1700442794
1700442795
使用split方法根据空格来分割单词,然后计算分隔后的数组长度,这种方法可靠吗?可行吗?我们来看输出:
1700442796
1700442797
Today is Monday
1700442798
1700442799
Today is Monday单词数:3
1700442800
1700442801
Today is Monday
1700442802
1700442803
Today is Monday单词数:4
1700442804
1700442805
Today is Monday?No!
1700442806
1700442807
Today is Monday?No!单词数:3
1700442808
1700442809
I’m Ok.
[
上一页 ]
[ :1.70044276e+09 ]
[
下一页 ]