public class Test{ public static void main(String args[]) { String str="@Shang Hai Hong Qiao Fei Ji Chang"; boolean rs = false; for(int i=0;i<str.length();i++){ char z=str.charAt(i); if('a' == z || 'F' == z) { rs = true; break; }else{ rs= false; } } System.out.println(rs); } }
這種方法使用簡單直觀,但是 難以解決複雜的工作,而且代碼量也會增加很多,不利於維護。
這時,我們可以使用Regex來實現這些功能,而且代碼簡單易維護。下面就來介紹了Java中對字串的Regex的幾個常用的功能,具體情況如下所示(其中用到了java.util.regex包):
1.Java中在某個字串中查詢某個字元或者某個子字串 Java代碼 String s = "@Shang Hai Hong Qiao Fei Ji Chang"; String regEx = "a|F"; //表示a或F Pattern pat = Pattern.compile(regEx); Matcher mat = pat.matcher(s); boolean rs = mat.find();
如果s中有regEx,那麼rs為true,否則為flase。
如果想在尋找時忽略大小寫,則可以寫成Pattern pat=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
2.在某個檔案中擷取一段字串 Java代碼 String regEx = ".+\(.+)$"; String s = "c:\test.txt"; Pattern pat = Pattern.compile(regEx); Matcher mat = pat.matcher(s); boolean rs = mat.find(); for(int i=1;i<=mat.groupCount();i++){ System.out.println(mat.group(i)); }
以上的執行結果為test.txt,提取的字串儲存在mat.group(i)中,其中i最大值為mat.groupCount();
3.對字串的分割 Java代碼 String regEx=":"; Pattern pat = Pattern.compile(regEx); String[] rs = pat.split("aa:bb:cc");
執行後,r就是{"aa","bb","cc"}
如果用Regex分割就如上所示,一般我們都會使用下面更簡單的方法: Java代碼 String s = "aa:bb:cc"; String[] rs=s.split(":");
4.字串的替換/刪除 Java代碼 String regEx="@+"; //表示一個或多個@ Pattern pat=Pattern.compile(regEx); Matcher mat=pat.matcher("@@aa@b cc@@"); String s=mat.replaceAll("#");
結果為"##aa#b cc##"
如果要把字串中的@都給刪除,只用要Null 字元串替換就可以了: Java代碼 String s=mat.replaceAll("");
結果為"aab cc"
| 註:對Pattern類的說明: 1.public final class java.util.regex.Pattern是Regex編譯後的表達法。 下面的語句將建立一個Pattern對象並賦值給控制代碼pat:Pattern pat = Pattern.compile(regEx); 有趣的是,Pattern類是final類,而且它的構造器是private。也許有人告訴你一些設計模式的東西,或者你自己查有關資料。這裡的結論是:Pattern類不能被繼承,我們不能通過new建立Pattern類的對象。 因此在Pattern類中,提供了2個重載的靜態方法,其傳回值是Pattern對象(的引用)。如: Java代碼 public static Pattern compile(String regex) { return new Pattern(regex, 0); } 當然,我們可以聲明Pattern類的控制代碼,如Pattern pat = null; 2.pat.matcher(str)表示以用Pattern去產生一個字串str的匹配器,它的傳回值是一個Matcher類的引用。 我們可以簡單的使用如下方法:boolean rs = Pattern.compile(regEx).matcher(str).find(); |
| 附 : 常用的Regex: 匹配特定數字: ^[1-9]d*$ //匹配正整數 ^-[1-9]d*$ //匹配負整數 ^-?[1-9]d*$ //匹配整數 ^[1-9]d*|0$ //匹配非負整數(正整數 + 0) ^-[1-9]d*|0$ //匹配非正整數(負整數 + 0) ^[1-9]d*.d*|0.d*[1-9]d*$ //匹配正浮點數 ^-([1-9]d*.d*|0.d*[1-9]d*)$ //匹配負浮點數 ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$ //匹配浮點數 ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$ //匹配非負浮點數(正浮點數 + 0) ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$ //匹配非正浮點數(負浮點數 + 0) 評註:處理大量資料時有用,具體應用時注意修正
匹配特定字串: ^[A-Za-z]+$ //匹配由26個英文字母組成的字串 ^[A-Z]+$ //匹配由26個英文字母的大寫組成的字串 ^[a-z]+$ //匹配由26個英文字母的小寫組成的字串 ^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字串 ^w+$ //匹配由數字、26個英文字母或者底線組成的字串
在使用RegularExpressionValidator驗證控制項時的驗證功能及其驗證運算式介紹如下:
只能輸入數字:“^[0-9]*$” 只能輸入n位的數字:“^d{n}$” 只能輸入至少n位元字:“^d{n,}$” 只能輸入m-n位的數字:“^d{m,n}$” 只能輸入零和非零開頭的數字:“^(0|[1-9][0-9]*)$” 只能輸入有兩位小數的正實數:“^[0-9]+(.[0-9]{2})?$”< |