【零碎JAVA】正則表達式

對於複雜的字符串處理,如果我們單過使用String類對她進行我們需要的處理會變得十分困難,編寫代碼會變的十分繁雜,此時,我們可以使用正則表達式來處理這樣的問題。

java中的java.util.regex包中對正則表達式進行了描述。這個包中主要包含兩個類,一個Pattern,一個Mathcer。其中Pattern可以理解爲一個分裝好的正則表達式實例對象,Mathcer可以理解爲指定字符串與正則表達式匹配後產生的一個匹配器,他內部提供了很多對匹配後的結果的操作。使用起來比較便捷。

使用Pattern與Matcher的操作步驟如下:

1.創建Pattern對象,該對象是由Pattern編譯指定的正則表達式後產生的。

2.將獲得的Pattern對象與我們需要比較的字符串進行匹配,產生一個Mathcer對象。

3.根據我們的需求,調用Matcher的方法,達到我們的目標。

比如,我們需要比較將例如“aabbbccddeeeeeffg”字符串轉換成”abcdefg”,我們可以這麼做

	String str = "aabbbccddeeeeeffg";
	Pattern pattern = Pattern.compile("([a-z])\\1+");
	Matcher matcher = pattern.matcher(str);
	str = matcher.replaceAll("$1");
	sop(str);

當然,我們也可以直接使用String提供的replaceAll方法來實現這個功能:

	String str = "aabbbccddeeeeeffg";
	str = str.replaceAll("([a-z])\\1+", "$1");
	sop(str);

如果我們查看String的repalceAll源碼,我們會發現,他底層就是使用了Pattern與Matcher。

上述代碼的正則表達式用到了組合的概念,用()括起來的就是一個組,後面我們可以通過組號來調用前面的組內容,避免重複寫代碼,組號是根據左括號出現的位置決定的,第一個左括號到與之對應右括號爲第一組,第二個左括號到與之對應的右括號爲第二組,以此類推...我們可以使用\+組號的形式來調用,需要注意的是\是特殊字符,需要使用\來轉義。

 

處理字符串主要有以下幾種操作:

1.匹配:用於判斷是否與我們指定的形式符合。主要方法 matches()

2.替換:將一有字符串變換成另一種字符串,元素基本跟已有字符串一致。主要方法 replaceAll()

3.切割:根據自己的需求將字符串分割成多個字符串。主要方法 split()

4.獲取:獲取符合要求的字符串子串。

習題:

	/*
	*	將IP字符串“192.168.1.150 2.2.2.2 10.16.48.123 56.78.123.253”按照網段順序輸出
	*	思路:
	*		1.使用String的split方法將各個IP地址分割開來。
	*		2.由於IP的每一段長度都不一樣,無法進行準確的比較,我們需要將IP地址的每段都設置成3位,
	*			先給IP地址的每段前面添加兩個0,然後取後三位,這樣就可以統一起來。
	*		3.使用集合存放字符串輸出,由於需要有順序,所以使用TreeSet存放。
	*/

	import java.util.*;	
	import java.util.regex.*;

	class IPSortDemo 
	{
		public static void main(String[] args) 
		{
			String str = new String("192.168.1.150 2.2.2.2 10.16.48.123 56.78.123.253");
			str = str.replaceAll("([0-9]{1,3})", "00$1");
			str = str.replaceAll("0+([0-9]{3})", "$1");
			TreeSet<String> ts = new TreeSet<String>();
			String[] arr_str = str.split(" ");
			for(String s : arr_str){
				ts.add(s);
			}

			Iterator iterator = ts.iterator();
			while(iterator.hasNext()){
				String temp = (String)iterator.next();
				sop(temp.replaceAll("0*(<a target=_blank target="_blank" href="file://\\d">\\d</a>+)", "$1"));
			}
		
		}

		public static void sop(Object obj){
			System.out.println(obj);
		}
	}	


鏈接:網絡爬蟲示例程序

 

發佈了36 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章