1.StringBuilder
我们在用+号相加两个String类时,JVM会创建一个StringBuilder类,然后将所有相加的String类全都append(),最后toString()返回最后结果。以下两段代码:
|
|
第一个implicit方法中,每次循环都要创建一个StringBuilder类,而第二个只要创建一次。更优化的方法还可以先指定StringBuilder的大小,避免多次重新分配。
注意:给一个类定义toString()接口时,如果内部有隐式调用本身的toString(),会发生无限递归。
|
|
2.内部类的static
内部类用static修饰,有两个作用:
没有this,无法取得外部类的this。
调用时可以直接调用无需new,例如:
|
|
3.格式化输出
System.out.format()方法模仿了c的printf(),用法一样。
新的接口:
Formatter类是Java中用来处理格式化输出的类,构造器需要一个想哪里输出的流。
类中format()接口用来输出,格式:
%[argument_index][flag][width][.precision]conversion
%-10.5f:-表示左对齐,10表示宽度,.5精度,用来String上表示显示字符数量。f是float。
String.format()一个static方法,接受一个格式串。
3.正则
贪婪:意味着最大匹配,匹配最大长度。
懒惰: 最小匹配,匹配满足的最小长度。
比如”aaaa”中用贪婪匹配能匹配”aaaa”,用?懒惰匹配就匹配”a”
元字符
^:匹配行或者字符串的起始位置。
$:匹配行或者字符串的结尾。
\b:匹配一个位置,不消耗任何字符。
\d:匹配一个数字。
\w:匹配字母,数字,下划线。
\s:匹配空格。
.:匹配一个除了换行符以外所有字符。
[abc]:匹配一个括号内的字符。
反义字符
改成大写就行
[^abc]:除了abc以外的字符。
\W:不是字母,数字,下划线的字符。
量词
*:匹配前面的一个闭包。贪婪的
+:与*相同,唯一区别是不可以0次匹配。懒惰的
[:标记一个中括号表达式的开始。
?:匹配前面的子表达式0或1次。可以指明一个非贪婪限定符。
{:标记限定符表达式的开始。
|:两个表达式或匹配。
{n}:匹配确定的n次
{n,}:至少匹配n次。
{n,m}:匹配n-m次。
String中匹配正则的接口是matches(String format)
更高级的工具是Pattern和Matcher.
Pattern通过static方法compile(String)编译一个正则,返回一个Matcher,Matcher有接口matcher(String)用来匹配字符串。还有接口group(),find(),