《Java编程思想》 第十三章 字符串 记录

1. 不可变的String

  • String对象是不可变的。查看JDK文档你就会发现,String中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。
  • 对于一个方法而言,参数是为该方法提供信息的,而不是想让该方法改变自己的。

2. 重载“+”与StringBuilder

  • 直接使用重载“+”进行字符串拼接,会自动引入StringBuilder类,虽然我们在源代码中并没有使用StringBuilder类。其为了能生成最终的String,此方式会产生一大堆需要垃圾回收的中间对象。
  • 如果直接使用StringBuilder进行拼接,只生成一个StringBuilder对象,显式的创建StringBuilder还允许你预先为其制定大小。如果你已经知道最终的字符串大概有多长,那预先制定StringBuilder的大小可以避免多次重新分配缓冲。
  • StringBuilder是Java SE5引入的,在这之前Java用的是StringBuffer。后者是线程安全的,因此开销也会大些。

3. String上的操作

方法 参数,重载版本 应用
构造器 重载版本:默认版本,String,StringBuilder,StringBuffer,char数组,byte数组 创建String对象
length() String中字符的个数
charAt() Int索引 取得String中该索引位置上的char
getChars(),getBytes() 要复制部分的起点和终点的索引,复制的目标数组,目标数组的起始索引 复制char或byte到一个目标数组中
toCharArray() 生成一个char[],包含String的所有字符
equals(),equalsIgnoreCase() 与之进行比较的String 比较两个String的内容是否相同
compareTo() 与之进行比较的String 按词典顺序比较String的内容,比较结果为负数、零或正数。注意,大小写并不等价
contains() 要搜索的CharSequence 如果该String对象包含参数内容,则返回true
contentEquals() 与之进行比较的CharSequence或StringBuffer 如果该String与参数的内容完全一致,则返回true
equalsIgnoreCase() 与之进行比较的String 忽略大小写,如果两个String的内容相同,则返回true
regionMatcher() 该String的索引偏移量,另一个String及其索引偏移量,要比较的长度。重载版本增加了“忽略大小写”功能 返回boolean结果,以表明所比较区域是否相等
startsWith() 可能的起始String。重载版本在参数中增加了偏移量 返回boolean结果,以表明该String是否已此参数起始
endWith() 该String可能的后缀String 返回boolean结果,以表明此参数是否该字符串后缀
indexOf(),lastIndexOf() 重载版本包括:char,char与起始索引,String,String与起始索引 如果该String并不包含此参数,就返回-1,;否则返回此参数在String中的起始索引。lastIndexOf()是从后向前搜索
subString()(subSequence) 重载版本:起始索引;起始索引+终点坐标 返回一个新的String,以包含参数指定的子字符串
concat() 要连接的String 返回一个新的String对象,内容为原始String连接上参数String
replace() 要替换掉的字符,用来进行替换的新字符。也可以用一个CharSequence来替换另一个CharSequence 返回替换字符后的新String对象。如果没有替换发生,则返回原始的String对象
toLowerCase() toUpperCase() 将字符的大小写改变后,返回一个新String对象。如果没有改变发生,则返回原始的String对象
trim() 将String两端的空白字符删除后,返回一个新的String对象。如果没有发改变发生,则返回原始的String对象
valueOf() 重载版本:Object;char[];char[],偏移量,与字符个数;boolean;char;int;long;float;double 返回一个表示参数内容的String
intern() 为每个唯一的字符序列生成一个且仅生成一个String引用
  • 从这种表中可以看出,当需要改变字符串的内容时,String的方法都会返回一个新的String对象。同时,如果没有内容发生改变,String的方法只是返回指向原对象的引用而已。这可以节约存储空间以及避免额外的开销。

4. 格式化输出

  • 在Java中,所有新的格式化功能都由java.util.Formatter类处理。可以将Formatter看作一个翻译器,它将你的格式化字符与数据翻译成需要的结果。
  • 下面的表格包含了最常用的类型转换
类型转换字符 含义
d 整数型(十进制)
c Unicode字符
b Boolean值
s String
f 浮点数(十进制)
e 浮点数(科学计数)
x 整数(十六进制)
h 散列码(十六进制)
% 字符“%”
  • String.format()是一个static方法,它接受与Formatter.format()方法一样的参数,但返回一个String对象。当你只需使用format()方法一次的时候,String.format()用起来很方便。

5. 正则表达式

发布了57 篇原创文章 · 获赞 11 · 访问量 9877

猜你喜欢

转载自blog.csdn.net/qq_36160730/article/details/97304829