不可变的String:
String对象是不可变的
重载“+”与StringBuilder:j
- Javap -c (表示生成JVM字节码)
- “+”编译器自动的引入了java.lang.StringBuilder类,并为每个字符串调用一次StringBuilder的append()的方法,最后调用toString()生成结果
- 当为类编写toString()方法时,如果要在toString()方法中使用循环,那么最好自己创建一个StringBuilder对象,用它来构造最终结果
- StringBuilder方法:append(),toString(),insert(),repleace(),substring(),reverse(),最终结果每次用一次append()
- StringBuffer线程安全,开销较大
无意识的递归:
希望toString()方法打印出对象的内存地址,使用this会导致递归错误,应该调用Object.toString()方法 super.toString()
格式化输出:
printf():格式修饰符
System.out.format():可用于PrintStream或PrintWriter,其中也包括System.out
Formatter类:
java.util.Formatter类。构造器可以接受多种输出目的地,最常用的还是PrintStream()、OutputStream和File
用法:Formatter f = new Formatter(System.err); f.format("%s The Turtle is at (%d,%d)\n", name, x, y);
格式化说明符:
%[argument_index$][flags][width][.precision]comversion
width:指定最小尺寸
precision:指明最大尺寸
应用于String时,表示打印String时输出字符的最大数量
应用于浮点数时,表示小数部分要显示出来的位数(默认为6位)
无法应用于整数,否则将触发异常
默认右对齐,使用"-"标志来改变对齐方向
Formatter转换:
boolean或Boolean对象,其转换结果为true或false。对其他类型参数,只要该类型不为null,那么转换的结果就永远都是true。数字0转换结果依然为true
d | 整数型(十进制) | e | 浮点数 |
c | Unicode字符 | x | 整数(十六进制) |
b | Boolean值 | h | 散列码(十六进制) |
s | String | % | 字符“%” |
f | 浮点数(十进制) |
|
|
String.format():返回一个String对象,接受与Formatter.format()方法一样的参数
正则表达式:
基础:
双\\在java中表示插入一个正则表达式的反斜线,插入反斜线用\\\\
换行和制表符用\n\t
" ".split()返回一个String[]
" ".replaceFirst( , ) " ".replaceAll( , )
创建正则表达式:
量词:
贪婪型、勉强型、占有型(防止回溯)
Pattern和Matcher:
Pattern p = Pattern.compile("");
Matcher m = p.matcher(String);
boolean matches() 检查regex是否匹配整个CharSequence类型的input参数
boolean lookingAt() 判断该字符串的起始部分是否能够匹配模式
pattern标记:
Pattern Pattern.compile(String regex,int flag)
Pattern.SASE_INSENSITIVE
Pattern.COMMENTS
Pattern.MULTILINE
split():
替换操作:
reset():将现有的Matcher对象应用于一个新的字符序列
正则表达式与Java I/O:
扫描输入:
Scanner定界符:
用正则表达式扫描:
StringTokenizer: