String
String对象是不可变的。只读特性,指向它的任何引用都不能改变它的值。
只重载了+ 和 +=两个操作符,效率低,慎用。
方法 | 应用 |
---|---|
length() | String中字符的个数 |
charAt() | String在该索引位置上的char |
getChars(),getBytes() | 复制chars, bytes到目标数组中 |
toCharArray() | 生成char[] |
equals(),equalsIgnoreCase() | 比较两个String是否相同,equalsIgnoreCase不考虑大小写 |
compareTo() | 按字典序比较String的内容,相等为零,靠前为负 |
contains() | 是否包含要搜索的charSequence |
contentEquals() | 比较charSequence或StringBuffer是否与String对象的内容完全一致 |
regionMatcher() | 两个String比较区域是否相等 |
startWith(),endWith() | 是否以某个String为前缀,后缀 |
indexOf(),lastIndexOf() | 起始索引(最后的索引) |
substring() | 子字符串 |
concat() | 原始String链接新String |
replace() | 替换字符(或CharSequence)后的新String |
toLowerCase(),toUpperCase() | 大小写转换 |
trim() | 删除两端的空白 |
valueOf() | 表示参数内容的String |
intern() | 为每一个唯一的字符序列生成一个且仅生成一个String引用 |
split() | 将String从正则表达式匹配的地方切开,匹配到的部分被舍弃 |
replaceFirst(). replaceAll() | 替换正则表达式匹配的地方 |
当需要改变字符串内容时,都会返回一个新的String对象,如果没有发生内容改变,就返回原始对象的引用!
StringBuilder
insert(),replace(),substring(),reverse(),append(),toString(),delete()
格式化输出
System.out.format()
和c中printf()等价
Formatter类
java.util.Formatter 将格式化字符串与数据翻译成需要的结果,创建时需要向构造器传递信息,告诉它最终结果输出到哪里。
Formatter f = new Formatter(System.out);
String.format()
接受和Formatter.format()一样的参数,返回一个String
格式化说明符
%[argument_index$][flags][width][.percision]conversion
width 可以应用于各种类型的数据转换,用来控制一个域的最小尺寸,默认右对其,可以用-改变对齐方向
percision 用于String时,表示输出字符的最大数量;用于浮点数时,表示小数部分的位数,位数不够补0
类型转换字符
符号 | 意义 |
---|---|
d | 十进制整数 |
c | Unicode字符 |
b | Boolean |
s | String |
f | float |
e | float(科学计数) |
x | 十六进制整数 |
h | 十六进制散列码 |
% | 字符% |
tips
- append(a+":"+c) 编译器会使用两个StringBuilder
- 如果一个类重载了toString并且要在toString中打印内存地址,print(this)会导致无限递归,应该用print(super)