TIJ-4Edition-String

1、不可变String

  String对象是不可变对象,每一次修改都会创建新的String对象。

  使用+拼接字符串时,也是不断创建新的字符串对象的。

  为了更高效的拼接字符串,应该使用StringBuilder对象,特别是在循环中拼接时。

 

2、对象的打印——toString()

  当直接打印对象时,会自动调用对象的toString() 方法。

  如果没有重写toString() 方法,则使用Object的toString() 方法,打印对象的内存地址。

/**
* 无意识的递归
*/
class A{
     toString(){ System.out.println(this);}
}

  在类的toString() 方法中打印该类的对象,则会引起隐式地递归。

 

3、格式化输出

  在Java中,所有新的格式化功能都由java.util.Formatter类来处理。

  查阅Javadoc来看具体的使用方法。https://docs.oracle.com/javase/8/docs/api/

 

4、正则表达式

  记住Java中的正则表达式和其他语言不同:

    \\ 才是转义的反斜杠, \\d 表示数字

    普通的反斜杠为:\\\\

  java.util.regex包中封装了正则表达式的使用。

  Pattern:

    正则表达式的编译表示。必须首先将指定为字符串的正则表达式编译到此类的实例中。

    然后,可以使用生成的模式创建匹配器对象,该对象可以根据正则表达式匹配任意字符序列。

    执行匹配所涉及的所有状态都驻留在匹配器中,因此许多匹配器可以共享相同的模式。

 Pattern p = Pattern.compile("a*b");  //编译正则表达式
 Matcher m = p.matcher("aaaaab");    //用正则表达式匹配并返回一个Matcher对象来表示匹配结果
 boolean b = m.matches();         //获取是否匹配成功

  Matcher:

    通过解释模式对字符序列执行匹配操作的引擎。

    匹配器是通过调用模式的匹配器方法从模式中创建的。

    一旦创建,匹配器就可以用来执行三种不同类型的匹配操作:

      matches方法尝试根据模式匹配整个输入序列。

      lookingAt方法尝试将输入序列与模式匹配,从开头开始。
      find方法扫描输入序列,寻找与模式匹配的下一个子序列。

  

匹配字符:      
    x            字符x     
    \\           反斜杠字符     
    \0        八进制值字符     
    \xhh       十六进制值的字符0xhh     
    \uhhhh     十六进制值的Unicode字符0xhhh     
    \x{h…h}       十六进制值的字符0xh…h     
    \t         制表符('\u0009')     
    \n         换行符('\u000A')     
    \r          回车符('\u000D')     
    \f          换页符('\u000C')     
    \e         转义字符('\u001B')     
    \cx         对应于x的控制字符(ctrl + x)

 

匹配字符集:      
    [abc]          匹配a、b、c 中任意一个     
    [^abc]        不能是a、b、c中任何一个     
    [a-zA-Z]       所有大小写字母     
    [a-d[m-p]]     a到d,或 m到 p     相当于  [a-dm-p]     (并集)     
    [a-z&&[def]]     d、e或 f                      (交集)     
    [a-z&&[^bc]]     a到z,但不包含b和c   相当于  [ad-z]      (减法)     
    [a-z&&[^m-p]]     a到z,但不包含m到p  相当于  [a-lq-z]     (减法)

 

  

预设的字符集:

    .          任何字符(可能匹配也可能不匹配行终止符)

    \d           数字:[0-9]

    \D          非数字:[^0-9]

    \s           空白字符(空格、tab、换行、换页和回车)

    \S           非空白字符

    \w           词字符:[A-zA-Z_0-9]

    \W          非词字符:[^\w]

 

匹配边界值:      
    ^          行的开始     
    $          行的结束     
    \b          字边界     
    \B          非字边界     
    \A          输入的开始     
    \G          上一个匹配的结束

 

  

量词:

    X?           0个或1个X

    X+            1个或多个X

    X*           0个或多个X

    X{n}          n个X

    X{n,}         至少n个X

    X{m,n}           [m,n)个X

 

  量词匹配原则:

    贪婪型:能匹配多少就匹配多少,默认是贪婪型

    勉强型:在量词之后加  来表示,匹配满足模式所需的最少字符

    占有型:只有在Java中才有,不保存匹配的状态,防止被回溯。在量词后加  表示

  匹配组:

    用() 括起来的就是一个组,可以一起被匹配或不被匹配。

    在表达式中,可以用组的编号来指代组。

第一个编号指代整个表达式,然后按照左括号从左到右出现顺序来排序:
((A)(B(C))):
    1        ((A)(B(C)))
    2        (A)
    3        (B(C))
    4        (C)

 

  匹配示例:

f\\w+            以f开头的单词                          float    loate
-?\\d+ 以-开头的数字或不以-开头的数字 -1234    +1234

 

    

 

 

 

posted @ 2021-09-18 15:13  Lqblalala  阅读(40)  评论(0编辑  收藏  举报