Java學習筆記(18)
阿新 • • 發佈:2019-05-06
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)