有關(guān)正則表達(dá)式的一個(gè)小技巧
最近編個(gè)小程序,要涉及到讀取用戶輸入的文件路徑,并根據(jù)其保存到相應(yīng)的目錄。
由于用戶輸入的是一般的字符表達(dá)式,比如“D:\document\myprogram\first.java”.需要將'\'換成'\\'才行。剛開始以為replaceAll("\\", "\\\\”)就可以了。而后來發(fā)現(xiàn)需寫成replaceAll("\\\\", "\\\\\\\\”)才行。自己又編了個(gè)程序測(cè)試一下:
String s = "D:\\documents\\first.java"
String ss = ss = s.replaceAll("\\\\", "\\\\\\\\”);
System.out.println("s= " + s);
System.out.println("ss=" + ss);
結(jié)果輸出:
s= D:\documents\first.java
ss= D:\\documents\\first.java
后來仔細(xì)想想才明白,首先,java會(huì)把“\\\\”解釋成一個(gè)字符串,接下來,由于replaceAll是以正則表達(dá)式作為參數(shù),所以“\\”被解釋成一個(gè)regex。對(duì)于一個(gè)regex來說這就代表著一個(gè)字符,就是“\”。對(duì)后面的那個(gè)8個(gè)\來說,最終會(huì)被解釋成“\\”。
由于用戶輸入的是一般的字符表達(dá)式,比如“D:\document\myprogram\first.java”.需要將'\'換成'\\'才行。剛開始以為replaceAll("\\", "\\\\”)就可以了。而后來發(fā)現(xiàn)需寫成replaceAll("\\\\", "\\\\\\\\”)才行。自己又編了個(gè)程序測(cè)試一下:
String s = "D:\\documents\\first.java"
String ss = ss = s.replaceAll("\\\\", "\\\\\\\\”);
System.out.println("s= " + s);
System.out.println("ss=" + ss);
結(jié)果輸出:
s= D:\documents\first.java
ss= D:\\documents\\first.java
后來仔細(xì)想想才明白,首先,java會(huì)把“\\\\”解釋成一個(gè)字符串,接下來,由于replaceAll是以正則表達(dá)式作為參數(shù),所以“\\”被解釋成一個(gè)regex。對(duì)于一個(gè)regex來說這就代表著一個(gè)字符,就是“\”。對(duì)后面的那個(gè)8個(gè)\來說,最終會(huì)被解釋成“\\”。
posted on 2006-09-04 16:02 何晏成 閱讀(92) 評(píng)論(0) 編輯 收藏