文档章节

[笔记]改善Java程序的151个建议---第四章 字符串

jimyao
 jimyao
发布于 2016/01/29 14:48
字数 870
阅读 9
收藏 0

建议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,把汉字转换为拼音然后实现自己的排序算法。

© 著作权归作者所有

共有 人打赏支持
jimyao
粉丝 17
博文 66
码字总数 27856
作品 0
朝阳
《编写高质量代码 改善Java程序的151个建议》读书笔记

第7章 泛型和反射 建议94 不能初始化泛型参数的数组 Java的泛型在编译期有效,在运行期被删除,所有的泛型参数类型在编译后都会被擦出掉 Java泛型类和普通类在编译后都指向同一字节码 第8...

OSC_fly
08/23
0
0
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
《编写高质量代码:改善java程序的151个建议》笔记

前言: 很喜欢作者的前言: 对于java,我非常感激,从物质上来说,它给了我工作,帮我养家糊口;从精神上来说,它带给我无数的喜悦、困惑、痛苦、无奈------一如我们的生活。 第10章:性能和...

城固如春
2017/11/01
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
07/25
0
0
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
0
8

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
50分钟前
4
1
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0
麒麟AI首席科学家现世

8月31日,华为发布了新一代顶级人工智能手机芯片麒麟980,成为全球首款7nm工艺手机芯片,AI方面也实现飞跃,支持人脸识别、物体识别、物体检测、图像分割、智能翻译等。 虽然如今人人都在热议...

问题终结者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部