1. 程式人生 > >Java程式設計思想之讀書筆記系列十一 --- 第十三章 --- 字串

Java程式設計思想之讀書筆記系列十一 --- 第十三章 --- 字串

  • String物件是不可變的,具有隻讀特性
  • 預先指定StringBuilder的大小可以避免多次重新分配緩衝(那麼:如果超出預先指定的大小,會出現什麼情況呢?
  • 重寫自定義類的toString()方法的時候,注意避免this的使用,否則會導致無窮的遞迴(正確的方法應該是呼叫super.toString()方法)
  • 格式修飾符,在System.out.format當中(比如%d,%f等等)
  • System.out.printf()和System.out.format()方法等同
  • Formatter的構造器經過過載可以接受多種輸出目的地,比如PrintStream,OutputStream和File
  • Formatter.format(%-15.15s %5d %10.2f", name, qty, price):-表示左對齊,預設是右對齊;第一個15表示最小寬度,第二個15表示最大寬度(針對string)或者最多小數點位數(針對浮點數)
  • 在Java中,\\的含義是我要插入一個正則表示式的反斜線,所以其後的字元具有特殊的意義。比如,想表示一位數字,那麼應該是\\d;如果想插入一個普通的反斜線,應該是\\\\
  • 總之,有特殊含義的就需要用\\進行轉義,比如+號;而-號是不需要轉義的
  • Matcher.matches和Matcher.lookingAt方法會改變Matcher本身的狀態,從而影響到後續find方法的行為。例項如下:
Pattern p = Pattern.compile("abba"); Matcher m = p.matcher("abbacde"); while(m.find()){ System.out.println(
"Match "+ m.group() + " at positions " m.start() + "-"+ (m.end() - 1)); } System.out.println(m.matches()); System.out.println(m.lookingAt()); 輸出: Match abba at positions 0-3 false true 調整一下順序: Pattern p = Pattern.compile("abba"); Matcher m = p.matcher("abbacde"); System.out.println(m.matches());
System.out.println(m.lookingAt()); while(m.find()){ System.out.println("Match "+ m.group() + " at positions " m.start() + "-"+ (m.end() - 1)); } 輸出變為: false true find方法找不到任何匹配!沒有任何輸出
  • appendReplacement()和appendTail()方法:
    • appendReplacement()
    • appendTail()
  • Scanner可以接受各種型別的輸入物件(構造器),可以指定定界符(useDelimiter()方法),同時可以使用自定義的正則表示式進行掃描(hasNext(String regex))
  • StringTokenizer()方法已經過時,可以利用Scanner和正則表示式進行替換
以上就是關於字串的筆記內容,如果錯誤,敬請指出,謝謝!