优化字符串操作
来源:互联网 发布:工商局网络合同监管 编辑:程序博客网 时间:2024/04/29 08:18
本文来自程式先锋网站 http://www.javabiz.cn
通过“+”操作符进行字符串连接在Java里面是最方便的一种做法,但是从内存和性能角度来说,它几乎是开销最大的一种操作。
当编译器看到:
String s = "abc" + someint + somearray[index];
或者其他类型的连接,它实际上生成类似于下面这样的代码序列(或者至少字节码是等同于):
StringBuffer temp = new StringBuffer( );
temp.append( String.valueOf( "abc" ) );
temp.append( String.valueOf( someInt ) );
temp.append( String.valueOf( someArray[index] );
String s = temp.toString( );
这几句代码中明显的缺陷是StringBuffer对象的构造函数:buffer的大小总是16个字符。
然后,当数据被追加到这个buffer中的时候,如果需要更多的空间,buffer的大小将会成倍增长,并且老的数据是被复制到一个新的Buffer中
。所以为了优化我们不得不设置StringBuffer为自动增长。本文将给出一个替换指定位置的字符的做法,一个优化后的代码如下:
public static String replaceCharAt(String s, int pos, char c) {
StringBuffer buf = new StringBuffer( s );
buf.setCharAt( pos, c );
return buf.toString( );
}
只有一个buffer被创建,并且大小正好,转换一个StringBuffer为一个String才可能没有没有什么多余开销,好比两个buffer共享了某些数据
。删除一个字符串中的一个字符可以这样优化:
public static String removeChar(String s, char c) {
StringBuffer r = new StringBuffer( s.length() );
r.setLength( s.length() );
int current = 0;
for (int i = 0; i < s.length(); i ++) {
char cur = s.charAt(i);
if (cur != c) r.setCharAt( current++, cur );
}
return r.toString();
}
在早些的版本中,一个新的String对象被创建并且立即被丢弃!
原来版本中的删除字符的明显缺陷是当传入参数大于17个字符的时候,编译器创建的临时StringBuffer不得不被膨胀,为了优化,我们只是改
写使用正确的StringBuffer大小的方法即可。
public static String removeCharAt(String s, int pos) {
StringBuffer buf = new StringBuffer( s.length() - 1 );
buf.append( s.substring(0,pos) ).append( s.substring(pos+1) );
return buf.toString();
}
本文来自程式先锋网站 http://www.javabiz.cn
通过“+”操作符进行字符串连接在Java里面是最方便的一种做法,但是从内存和性能角度来说,它几乎是开销最大的一种操作。
当编译器看到:
String s = "abc" + someint + somearray[index];
或者其他类型的连接,它实际上生成类似于下面这样的代码序列(或者至少字节码是等同于):
StringBuffer temp = new StringBuffer( );
temp.append( String.valueOf( "abc" ) );
temp.append( String.valueOf( someInt ) );
temp.append( String.valueOf( someArray[index] );
String s = temp.toString( );
这几句代码中明显的缺陷是StringBuffer对象的构造函数:buffer的大小总是16个字符。
然后,当数据被追加到这个buffer中的时候,如果需要更多的空间,buffer的大小将会成倍增长,并且老的数据是被复制到一个新的Buffer中
。所以为了优化我们不得不设置StringBuffer为自动增长。本文将给出一个替换指定位置的字符的做法,一个优化后的代码如下:
public static String replaceCharAt(String s, int pos, char c) {
StringBuffer buf = new StringBuffer( s );
buf.setCharAt( pos, c );
return buf.toString( );
}
只有一个buffer被创建,并且大小正好,转换一个StringBuffer为一个String才可能没有没有什么多余开销,好比两个buffer共享了某些数据
。删除一个字符串中的一个字符可以这样优化:
public static String removeChar(String s, char c) {
StringBuffer r = new StringBuffer( s.length() );
r.setLength( s.length() );
int current = 0;
for (int i = 0; i < s.length(); i ++) {
char cur = s.charAt(i);
if (cur != c) r.setCharAt( current++, cur );
}
return r.toString();
}
在早些的版本中,一个新的String对象被创建并且立即被丢弃!
原来版本中的删除字符的明显缺陷是当传入参数大于17个字符的时候,编译器创建的临时StringBuffer不得不被膨胀,为了优化,我们只是改
写使用正确的StringBuffer大小的方法即可。
public static String removeCharAt(String s, int pos) {
StringBuffer buf = new StringBuffer( s.length() - 1 );
buf.append( s.substring(0,pos) ).append( s.substring(pos+1) );
return buf.toString();
}
本文来自程式先锋网站 http://www.javabiz.cn
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- 优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- C# 优化字符串操作
- C#优化字符串操作
- C#优化字符串操作
- java keywords,native,strictfp,transient,volatile
- C#数据库事务原理及实践
- back
- 云计算泄露Google的秘密
- 利用Java生成静态HMTL页面的方法收集
- 优化字符串操作
- vba利用treeview算距离
- 转载一篇有关转换HTML到WML的文章
- 如何结合使用 Subversion 和 Eclipse
- 提前书释意
- 修改了[HTML字符查看小工具],练练手,学学JS
- 使用PL/SQL,如何获得数字的英文拼写呢?
- SOA鼻祖 Eric Newcomer谈SOA
- 圣经基本真道