正則表示式和常用規則
* a:字元
* x 字元 x , 舉例:'a'表示字元a
* \\ 反斜線字元 , 在正則表示式中,只有兩個\\才能表達一個\
* \n 新行(換行)符 ('\u000A')
* \r 回車符 ('\u000D')
* b:字元類
* [abc] a、b 或 c(簡單類)
* [^abc] 任何字元,除了 a、b 或 c(否定)
* [a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍) 表示所有的字母,不分大小寫
* 同理,[0-9] 表示所有的數字
*
* c:預定義字元類
* . 任何字元(與行結束符可能匹配也可能不匹配) 假如要表示的就是.字元本身,用\.表示
* \d 數字:[0-9] 實際操作中,因為\\表示\,所以要寫成\\d表示數字0~9
* \w 單詞字元:[a-zA-Z_0-9]
* 注意,在正則表示式裡組成單詞的東西必須有 a-z,A-Z,0-9組成
*
* d:邊界匹配器
* ^ 行的開頭
* $ 行的結尾
* \b 單詞邊界 舉例: hello world?123 字母'o'和'w'之間的空格、'?'是邊界
* e:Greedy 數量詞
* X? X,一次或一次也沒有
* X* X,零次或多次
* X+ X,一次或多次
* X{n} X,恰好 n 次
* X{n,} X,至少 n 次
* X{n,m} X,至少 n 次,但是不超過 m 次
* 注意:如果在一個規則後面沒有給定次數,那麼預設是一次
*
* 正則表示式的應用:
* a:判斷功能
* String的public boolean matches(String regex)
* b:分割功能
* String的public String[] split(String regex)
* 根據給定正則表示式的匹配拆分此字串
* c:替換功能
* String的public String replaceAll(String regex, String replacement)
* 使用給定的replacement替換字串中所有匹配給定的正則表示式的子字串
* d:獲取功能
* Pattern和Matcher類的使用
* 模式和匹配器的使用。
* a:判斷功能舉例:
* 需求:判斷手機號碼是否滿足要求
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你的手機號:");
String phoneNumber = sc.nextLine();
String regex = "1[3578]\\d{9}";
System.out.println("你的手機號:" + phoneNumber.matches(regex));
* b:分割功能舉例:
* 需求: 有一個字串"91 27 46 38 50",請寫程式碼實現最終的輸出結果
* "27 38 46 50 91"
String str = "91 27 46 38 50";
//對字串進行分割,得到一個字元陣列
String[] strArray = str.split(" ");
//把String[]轉為int[]
int[] intArray = new int[strArray.length];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
//對int[]排序
Arrays.sort(intArray);
//將排序後的字元拼接成字串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < intArray.length; i++) {
sb.append(intArray[i]).append(" ");
}
//轉為字串,去尾部空格
String result = sb.toString().trim();
* c:替換功能舉例:
* 需求:有一個字串"Hello1234566World6227002511086653java"把其中非字母用'*'代替
//定義一個字串
String str = "Hello1234566World6227002511086653java";
//定義一個規則,把數字替換為*
String regex1 = "\\d+";
String regex2 = "\\d";
String replacement1 = "*";
String replacement2 = "";
String result1 = str.replaceAll(regex1, replacement1); //Hello*World*java
String result2 = str.replaceAll(regex2, replacement1); //Hello*******World****************java
String result3 = str.replaceAll(regex1, replacement2); //HelloWorldjava
* d:獲取功能舉例:
* 需求:將"da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?"中3個字母的子字串輸出
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
String regex = "\\b\\w{3}\\b"; // \\b是邊界
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());
}
注意:調group()方法前必須先呼叫find()方法才能返回一個group.不然會報// IllegalStateException: No match found