文档章节

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

jimyao
 jimyao
发布于 2016/01/29 14:48
字数 870
阅读 9
收藏 0
点赞 1
评论 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测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

JNI开发流程与引用数据类型的处理

今天我们来看下Java JNI,先看下维基百科给的定义, JNI, Java Native Interface, Java本地接口,是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用或库,也可以被其他程序调用。...

juexingzhe ⋅ 05/04 ⋅ 0

zrlog 1.10 发布,Java 构建的简约且好用的开源博客程序

ZrLog是使用Java开发的博客/CMS程序,具有简约,易用,组件化,内存占用低等特点。自带Markdown编辑器,让更多的精力放在写作上,而不是花费大量时间在学习程序的使用上。 v1.5以后版本可通过...

hibegin ⋅ 05/08 ⋅ 0

Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区 ⋅ 05/09 ⋅ 0

Java学习---Java简单认识

前言 小编在学习Java方面的基础知识,发现里面有很多是结合之前的语言的特点发展过来的,不同的地方是,Java有它自己的发展和特点。下面小编先简单地做一下总结,结合看过的1-2章的J2SE视频,...

m18633778874 ⋅ 04/01 ⋅ 0

Oracle Java SE 8 发行版更新:限制商业或生产用途

Oracle Java SE 8 发行版更新 Oracle Java SE 8 的公开更新仍面向单独的个人使用提供,至少持续至 2020 年底。 2019 年 1 月以后发布的 Oracle Java SE 8 公开更新将不向没有商用许可证的业务...

抢小孩糖吃 ⋅ 04/18 ⋅ 39

Centos7上搭建hadoop2.7分布式集群环境实验记录

ps:因为实验需要和学习过程,为了更好学习hadoop,所以为了方便记录以及供学习交流,特此做一份hadoop搭建实验记录。 1.准备三台虚拟机。 2.修改三台虚拟机的主机名分别为master,slave01,sl...

mukvintt ⋅ 04/15 ⋅ 0

sharding-jdbc源码分析—准备工作

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/7831817c1da8 接下来对sharding-jdbc源码的分析基于tag为源码,根据sharding-jdbc Features深入学习sharding-jdbc的几个主要特性...

飞哥-Javaer ⋅ 05/03 ⋅ 0

培训云计算学校,虚拟机基本结构讲解

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机...

长沙千锋 ⋅ 05/17 ⋅ 0

JVM学习之——Java内存区域

为了加深对Java语言的理解,加深对Java虚拟机工作机制、底层特性的了解和掌握,准备在闲暇时间,抽空对《深入理解Java虚拟机 JVM高级特性与最佳实践》一书进行学习。本文是学习此书第2章时的...

你想要怎样的未来 ⋅ 05/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 17分钟前 ⋅ 0

Spring mvc DispatchServlet 实现原理

在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件。而真正的逻辑实现其实是在DispatcherSer...

轨迹_ ⋅ 28分钟前 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 36分钟前 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 43分钟前 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 52分钟前 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部