1. 程式人生 > >Java表示式的陷阱——正則表示式的陷阱

Java表示式的陷阱——正則表示式的陷阱

5、正則表示式的陷阱

public class StringSplit {
	public static void main(String[] args) {
		String str = "java.is.funny.hello.world";
		String[] strArr = str.split(".");
		for ( String s : strArr ) {
			System.out.println(s);
		}
	}
}
       上面本希望通過呼叫String提供的split()方法,以點號(.)作為分隔符來分割這個字串,但執行該程式時發現沒有任何輸出內容。
       對於上面程式的執行結果,要注意如下兩點。
  1. String提供的split(String regex)方法需要的引數是正則表示式。
  2. 正則表示式中的點號(.)可匹配任意字元。
       為了可以實現點號(.)作為分隔符的目的,必須對點號進行轉義,將上面程式碼改為如下所示。
public class StringSplit {
	public static void main(String[] args) {
		String str = "java.is.funny.hello.world";
		String[] strArr = str.split("\\.");
		for ( String s : strArr ) {
			System.out.println(s);
		}
	}
}
輸出結果為: java
is
funny
hello
world
       從JDK1.4開始,Java加入了對正則表示式的支援,String類也增加了一些方法用於支援正則表示式,具體有如下方法。 matches(String regex):判斷該字串是否匹配指定的正則表示式。 String replaceAll(String regex , String replacement):將字串中所有匹配指定的正則表示式的子串替換成replacement後返回。 String replaceFirst(String regex , String replacement):將字串中第一個匹配指定的正則表示式的子串替換成replacement後返回。
String[] split(String regex):以regex正則表示式的子串作為分隔符來分割該字串。        以上四個方法都需要regex引數,這個引數就是正則表示式,因此使用這些方法時要特別小心。String提供了一個與replaceAll()功能相當的方法,如下所示: replace(CharSequence target , CharSequence replacement):將字串中所有的target子串替換成replacement後返回。
public class StringReplace {
	public static void main(String[] args) {
		String str = "java.is.funny.hello.world";
		String path1 = str.replace(".", "\\");  //使用replace()方法
		System.out.println(path1);
		String path2 = str.replaceAll("\\.", "\\\\");
		System.out.println(path2);
	}
}
輸出結果為: java\is\funny\hello\world
java\is\funny\hello\world