String
不可变String
String类中每一个看起来会修改String值得方法,实际上都是创建了一个全新的String对象。每当吧String对象作为方法的引用参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。
重载“+”与StringBuilder
使用“+”拼接字符串会造成一大堆需要垃圾回收的中间对象。虽然编译器在对“+”操作会自动创建StringBuilder对象,用以构造最终的String,但是编译器容易调入陷阱。比如,在循环添加字符串时,编译器会给每个循环创建一个StringBuilder。
注:1.可以使用javap来分析你的程序。2.可以使用Object.toString()打印对象的内存地址。
格式化输出
System.out.format()(printf()也可以)模仿自C的printf()。
System.out.println("Row 1: [" + x + " " + y + "]");
//新的方式
System.out.format("Row 1:[%d %f]\n", x, y);
//or
System.out.printf("Row 1:[%d %f]\n", x, y);
Formatter类:所有新的格式化功能都由java.util.Formatter类处理,当创建一个Formatter对象的时候,需要向其构造器传入输出目标位置,比如PrintStream,System.out。String.format()静态方法作用一样。
格式化说明符:%[对齐方向][宽度][.精度]类型转换字符
宽度:表示一个域的最小尺寸,默认是右对齐,可以使用“-”实现左对齐。宽度可以应用于各种数据的转换,其行为方式都是一样的。
精度:指明最大尺寸。对不同类型意义不同。对于String表示输出的最大字符,对浮点数表示小数部分的位数(默认6位),而对整数使用则会触发异常。
类型转换字符 | - |
---|---|
c | Unicode字符 |
b | Boolean值 |
s | String |
f | 浮点数(十进制) |
e | 浮点数(科学计数) |
x | 整数(十六进制) |
h | 散列码(十六进制) |
% | 字符“%” |
注:除了null,对于boolean转换结果都是true(0也是true)。
正则表达式
创建正则表达式:
Pattern.compile(str 正则表达式)生成一个Pattern对象。
pattern.match(str 检索字符串)生成一个Matcher对象。
组:Matcher对象提供了方法获取匹配组的信息。
Pattern标记:
Pattern Pattern.compile(String regex, int flag);
详看
操作:
分割:split()
替换:s.replaceFirst、s.replaceAll、matcher.appendReplacement(StringBuffer sbuf, String replacement)、matecher.appendTail(StringBuffer sbu)用法。
matcher.reset(String str)将现有的Matcher对象应用于一个新的字符序列。
应用:
1.扫描输入:使用Scanner类注入定界符(scanner.useDelimiter()),或者使用正则表达式扫描(scanner.hasNext(pattern),scanner.next(pattern))。
网友评论