字符串
不可变String
- String是不可变的,每个看似修改String值得方法实际上都是创建了一个新的String对象
- 当把String对象作为方法的参数时都会复制一份引用
重载“+”与StringBuilder
- “+”可以用来连接String
- 编译器会自动使用StringBuilder,但是显式的创建StringBuilder可以预先为其指定大小,避免多次重新分配缓存
- StringBuilder更快,StringBuffer是线程安全的,但是开销更大
无意识的递归
- 打印内存对象的地址应该调用Object.toString()
String上的操作
格式化输出
- format方法模仿c的printf(),format()和printf()是等价的
- 所有新的格式化功能由java.util.Formatter类处理
- 格式化说明符%[argument_index$][flags][width][.precision]conversion,分别表示参数在参数列表中的位置,修改输出格式的字符集,最小尺寸,最大尺寸,类型。
- precision用于字符表示最大长度。浮点数比哦啊是小数点后位数,默认为六位,多则舍入,少则补零。整数抛出异常
- 默认情况下是右对齐,可以添加“-”标志改变对齐方向
- 类型:十进制整数d unicode字符c boolean值b 字符串s 十进制浮点数f 科学计数浮点数e 十六进制整数x 十六进制散列码h 百分号%
- String.format()是一个静态方法,返回一个String对象
扫描输入
- Scanner构造器可以接受任何类型的输入对象
- 普通的next方法返回下一个String
- 默认情况下根据空白字符对输入进行分词,但是可以用正则表达式指定自己的定界符
- 可以使用自定义的正则表达式进行扫描,当next配合正则表达式使用时,将找到下一个匹配该模式的输入部分,调用match方法可以获得匹配结果。
- 它仅针对下一个输入分词进行匹配,如果正则表达式中有定界符,那么不可能匹配成功