Java編程思想(第十三章字符串)學習筆記

一、不可變String

需要明確的是,Java中只有值傳遞。對於一個方法而言,參數是爲該方法提供信息的,而不是爲了讓方法改變自己。

二、Java中僅有的2個被重載過的操作符

  1. +與+=在String類型中被重載
  2. Java不允許程序員重載任何操作符

三、考慮性能與線程安全問題請使用StringBuffer

  1. 在循環體內使用String的+拼接操作,會創建很多無用對象。
  2. 不考慮線程安全問題,可以使用StringBuider
  3. 線程安全,需要用StringBuffer

四、避免無意識遞歸

public class InfiniteRecursion {
	public String toString() {
		/*
		這裏使用this關鍵字不妥,由於String類重載了操作符+
		“InfiniteRecursion address: ”調用+操作符,
		會使得this也調用自己的toString方法,使自己變爲String類型
		造成無限遞歸!
		*/
		return "InfiniteRecursion address: " + this + "\n";
	}
	public static void main(String[] args) {
		List<InfiniteRecursion> v = new ArrayList<>();
		for(int i = 0; i < 10; i++) {
			v.add(new InfiniteRecursion());
			System.out.println(v);
		}
	} 
}

五、正則表達式

  1. 三種模式
String str = "aa<tr>sdfc</tr>abb<tr>asdas</tr>ccc"
一、貪婪型(最大匹配):先掃描全部,若不匹配,再縮小範圍
	若reg = <.*>會得到:<tr>sdfc</tr>abb<tr>asdas</tr>
	X? 
	X+ 
	X* 
	X{n} 
	X{n,} 
	X{n,m}
二、勉強型(最小匹配):從小範圍開始掃描,只要匹配到一個就立馬返回
	若reg = <.*?>會得到:<tr>sdfc</tr>
	X?? 
	X+? 
	X*? 
	X{n}? 
	X{n,}? 
	X{n,m}?
三、佔有型(完全匹配):先掃描全部,若不匹配,也不會縮小範圍
	若reg = <.*+>,這個還不知道得到啥,沒看明白,待填坑
	X?+ 
	X++ 
	X*+ 
	X{n}+ 
	X{n,}+ 
	X{n,m}+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章