[笔记]改善Java程序的151个建议---第四章 字符串
博客专区 > jimyao 的博客 > 博客详情
[笔记]改善Java程序的151个建议---第四章 字符串
jimyao 发表于2年前
[笔记]改善Java程序的151个建议---第四章 字符串
  • 发表于 2年前
  • 阅读 8
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

建议52:推荐使用String直接量赋值
String str = ''a';    //直接量复制
String str = new String("a");  //对象复制
字符串池,容纳所有String字符串对象。
intern方法会检查当前对象在对象池中是否有字面值相同的引用对象,如果有则返回池中的对象。如果没有则放置到对象池中,并返回当前对象。

String是final类,不可继承
String提供的所有方法中,如果有String返回值,就会建立一个新的String对象,不会对原来的对象修改。

建议53:注意方法中传递参数要求
public class StringUtils{
     //删除字符串
     public static string remove(String source, String sub){
          return source.replace(sub, "");
     }
}
//replaceAll传递的第一个参数是正则表达式

建议54:正确使用String,StringBuffer,StringBuilder
CharSequence接口有3个实现类:String,StringBuffer,StringBuilder

String类是不可改变的量,创建后不能修改。
StringBuffer是一个可变字符串序列,在内存中保存的是一个有序的字符序列(char类型数组),其对象值是可变的。
StringBuffer sb = new StringBuffer("a");
sb.append("b");
//sb初始化值是a,在append后,其值变成ab

String s = "a";
s = s + "b";
//s初始化是a,加号运算后s修改为"ab"的引用,初始化的"a"对象没有改变,变量s指向了新的引用地址。

StringBuffer和StringBuilder基本相同,区别是:StringBuffer是线程安全的,StringBuilder是线程不安全的。

应用场景
字符串不经常变化用String
频繁字符串计算,并多线程用StringBuffer
频繁字符串计算,并单线程用StringBuilder,如SQL拼装,JSON封装。

建议55:注意字符串位置
String str1 = 1+2+"apples";
String str2 = "apples"+1+2;
str1的值3apples,str2的值apples12

Java对加号的处理机制,在使用加号计算的表达式中,遇到String字符串,所有数据都会转换为String类型拼接。如果是原始数据,则直接拼接,如是对象,则调用toString方法的返回值拼接。

建议56:自由选择字符串拼接方法
字符串3种拼接方法:
加号,concat方法,StringBuffer(StringBuilder)效率最高

建议57:推荐在复杂字符串操作中使用正则表达式
字符串操作,追加,合并,替换,倒序,分割。对大量文本字符的处理,正则表达式提高效率,性能和准确性。

建议58:强烈建议使用UTF编码
(1)Java文件是通过IDE工具创建,编码格式是GBK.
(2)通过javac生产.class文件是UTF-8编码的UNICODE文件。UTF是UNICODE的存储和传输格式。可以声明GBK,则OS按照GBK读取.java文件。字符变量由GBK编码转变为UNICODE格式。
(3)通过操作系统默认字符集编码格式,重新编码变量的所有字节。UNICODE和GBK没有映射关系,不能自动转换。如果,OS是GBK,则JVM按照GBK读取了UNICODE的两个字节。

解决办法2个
(1)修改代码,指定UTF-8
(2)修改OS编码方式。
同一编码方式,要么GBK,要么UTF-8

GB2312,GBK,GB18030

建议59:对字符串排序持一种宽容的心态
对经常使用的汉字排序,用Collator类。
一些开源项目pinyin4j,把汉字转换为拼音然后实现自己的排序算法。

共有 人打赏支持
粉丝 17
博文 66
码字总数 27856
×
jimyao
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: