1. 程式人生 > >Java學習筆記(18)

Java學習筆記(18)

group ont split lse generate java ack 結巴 調用順序

替換     replaceAll(String regex, String replacement)

package cn.itcast.regex;

import java.util.Arrays;

/*
 
 匹配    matches()
 
 切割    split()
 
         看有多少組就看有多少對括號,依次從左往右的每一對括號就為第幾組
         ((A)(B(C)))
         第一組:((A)(B(C)))
         第二組:(A)
         第三組:(B(C))
         第四組:(C)
     \1    引用第一組所匹配到的內容
     
 替換    replaceAll(String regex, String replacement)
 
 查找
 
*/ public class Demo3 { public static void main(String[] args) { // TODO Auto-generated method stub //需求:編寫一個正則表達式匹配一個手機號 /*matchesPhone("13835026666"); matchesTel("020-38325125"); testSplit1(); testSplit2();*/ replaceTest1(); replaceTest2(); }
public static void matchesPhone(String phone) { //String reg="1[34578]\\d{9}"; System.out.println(phone.matches("1[34578]\\d{9}")?"合法手機號":"非法手機號"); } //需求2:匹配固定電話 public static void matchesTel(String tel) { System.out.println(tel.matches("0\\d{2,3}-[1-9]\\d{6,7}")?"合法固話":"非法固話"); }
//按照空格切割 public static void testSplit1() { String str="明 天 放 假"; String[] datas=str.split(" +"); System.out.println("數組的元素:"+Arrays.toString(datas)); } //根絕重疊詞進行切割 public static void testSplit2() { String str="大家家家明天天玩得得得得得得得得得得得開心"; String[] datas=str.split("(.)\\1+");//如果正則的內容需要被復用,那麽需要對正則的內容進行分組。分組的目的就是為了提高正則的復用性。組號不能指定,組號是從1開始 System.out.println("數組的元素:"+Arrays.toString(datas)); } //替換 public static void replaceTest1() { String str="如果需求請聯系我13556082126如果需求請聯系我13556082126如果需求請聯系我13556082126如果需求請聯系我13556082126如果需求請聯系我13556082126如果需求請聯系我13556082126"; String reg="1[34578]\\d{9}"; str=str.replaceAll(reg, "****"); System.out.println("被替換的內容是:"+str); } public static void replaceTest2() { String str="我我我要要要做做做項項項項項項目目";//還願結巴的話--------->我要做項目 把重疊詞替換成單個單詞 str=str.replaceAll("(.)\\1+", "$1");//如果需要在replaceAll方法正則的外部引用組的內容,那麽是使用 "$組號" System.out.println(str); } } 結果: 被替換的內容是:如果需求請聯系我****如果需求請聯系我****如果需求請聯系我****如果需求請聯系我****如果需求請聯系我****如果需求請聯系我**** 我要做項目

查找  

查找
查找需要使用的對象:
1.Pattern(正則對象)
2.Matcher(匹配器對象)
指定為字符串的正則表達式必須首先被編譯為此類的實例。然後,可將得到的模式用於創建 Matcher 對象,依照正則表達式,該對象可以與任意字符序列匹配。
執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。

因此,典型的調用順序是

Pattern p = Pattern.compile("正則");
Matcher m = p.matcher("字符串");
boolean b = m.matches();

匹配器要使用到的方法
1.find() 通知匹配器去匹配字符串,查找符合規則的字符串,如果能查找到符合規則的字符串,則返回true,否則返回false
2.group() 獲取符合規則的字串

註意:使用group方法的時候一定要先調用find方法讓匹配器去查找符合規則的字符串,否則報錯

單詞邊界匹配器
\b 單詞邊界匹配器只是代表了單詞的開始或者是結束部分,不匹配任何的字符

和空格什麽的字符不一樣

public class Demo5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("hello world".matches("hello\\b world"));
    }

}

結果:
true
package cn.itcast.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 
 查找
     查找需要使用的對象:
         1.Pattern(正則對象)
         2.Matcher(匹配器對象)
         指定為字符串的正則表達式必須首先被編譯為此類的實例。然後,可將得到的模式用於創建 Matcher 對象,依照正則表達式,該對象可以與任意字符序列匹配。
         執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。
         
 因此,典型的調用順序是

     Pattern p = Pattern.compile("正則");
     Matcher m = p.matcher("字符串");
     boolean b = m.matches();        
         
匹配器要使用到的方法
    1.find()        通知匹配器去匹配字符串,查找符合規則的字符串,如果能查找到符合規則的字符串,則返回true,否則返回false
    2.group()        獲取符合規則的字串
    
註意:使用group方法的時候一定要先調用find方法讓匹配器去查找符合規則的字符串,否則報錯
 */
public class Demo4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //找出三個字母組成的單詞
        String content="da jia de jia qi wan bi liao hai kai xin ma";
        String reg="\\b[a-zA-Z]{3}\\b";
        //先要把字符串的正則編譯成Pattern對象
        Pattern p=Pattern.compile(reg);
        //使用正則對象匹配字符串用於產生一個Matcher對象
        Matcher m=p.matcher(content);
        
        /*System.out.println("有符合規則的字符串嗎?"+m.find());
        System.out.println("獲取結果:"+m.group());*/
        
        while (m.find()) {
            System.out.println(m.group());
        }
    }

}

結果:
jia
jia
wan
hai
kai
xin

在正則中,想要匹配一個點(.)的話,必須使用\.來匹配。再使用反斜杠,就是\\.

Java學習筆記(18)