正則表達式的學習2

正則表達式的分割功能

String類的功能
public String [] split(String regex)

下面看代碼示例:

package 正則表達式;

public class Demo5_Split {

 public static void main(String[] args) { 
  demo1();
  demo2();
 }
 
 public static void demo2() {
  String s= "星期一.星期二.星期三";
  //String []arr=s.split(".");  //運行結果1
  String []arr=s.split("\\.");  //運行結果2     
  //要注意使用雙反斜線來通過正則表達式來切割字符串
  for(int i=0;i<arr.length;i++) {
   System.out.println(arr[i]);
  }
  /*
   * 運行結果1:
   * (爲空)
   * 
   * 運行結果2:
   * 星期一
   * 星期二
   * 星期三
   */
 }
 
 public static void demo1() {
  String s="星期一 星期二 星期三";
  String []arr=s.split(" ");
  for(int i=0;i<arr.length;i++) {
   System.out.println(arr[i]);
  }
        /*
         * 運行結果:
         * 星期一
         * 星期二
         * 星期三
         */
 }
}

下面再看一個運用正則表達式的分隔功能實現的小問題:

把給定字符串中的數字排序

需求:有如下一個字符串:“91 27 46 38 50”,請寫出代碼實現最終輸出結果是:“27 38 46 50 91”

package 正則表達式;

import java.util.Arrays;

public class Split_Sort {
 /*分析
  * 1.將字符串切割成字符串數組
  * 2.將字符串轉換成數字並將其存儲在一個等長度的int數組中
  * 3.排序
  * 4.將排序後的結果遍歷並拼接成一個字符串
  */
  
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String s="91 27 46 38 50";
  String []sArr=s.split(" ");
  int [] Arr = new int [sArr.length];
  for(int i=0;i<sArr.length;i++) {
   Arr[i]=Integer.parseInt(sArr[i]);
  }
  
  Arrays.sort(Arr);
  
  Demo(Arr);  //方法1
  Demo2(Arr);  //方法2
 }
 
 //這是比較好的做法
 public static void Demo2(int[] Arr) {
  StringBuilder sb=new StringBuilder();
  for(int i=0;i<Arr.length;i++) {
   if(i==Arr.length-1) {
    sb.append(Arr[i]);
   }else {
    sb.append(Arr[i]+" ");
   }
  }
  System.out.println(sb);
 }
 
 //這個方法會產生許多垃圾
 public static void Demo(int[] Arr) {
  String str="";
  for(int i=0;i<Arr.length;i++) {
   if(i==Arr.length-1) {
    str=str+Arr[i];
   }else {
    str=str+Arr[i]+" ";
   }
  }
  System.out.println(str);
 }
 
}

正則表達式的替換功能

正則表達式的替換功能
String類的功能:public String replaceAll(String regex,String replacement)

下面看一段代碼示例:

package 正則表達式;

public class Demo6_ReplaceAll {

 public static void main(String [] args) {
 
  String s="wo111ai222xuexi";
  String regex="\\d";     // \\d代表的是任意數字
  
  String s2=s.replaceAll(regex, "");
  System.out.println(s2);
 }
}

正則表達式的分組功能

正則表達式的分組功能
捕獲組可以通過從左到右計算其開括號來編號。例如,在表達式 ( ( A ) ( B ( C ) ) ) 中,存在四個這樣的組:
1 ( ( A ) ( B ( C ) ) )
2 ( A
3 ( B ( C ) )
4 ( C )
組零始終代表整個表達式。

下面看一段代碼示例:

package 正則表達式;

public class Demo7_Regex {

 public static void main(String[] args) {
  // 
  Demo1();
  Demo2();
 }
 
 public static void Demo2() {
  //疊詞  開心開心 快樂快樂
  String regex="(..)\\1";
  
  System.out.println("開心開心".matches(regex));  //true
  System.out.println("開心高興".matches(regex));  //false
  System.out.println("開開心心".matches(regex));  //false
 }
 
 public static void Demo1() {
  //疊詞 快快樂樂 高高興興
  String regex="(.)\\1(.)\\2";   //\\1代表第一組又出現了一次,\\2代表第二組又出現了一次
  
  System.out.println("快快樂樂".matches(regex));   //true
  System.out.println("快樂快樂".matches(regex));   //false
  System.out.println("高高興興".matches(regex));   //true
  System.out.println("高興興興".matches(regex));   //false
 }
 
}

下面再看兩個小案例中運用到的分組功能:

package 正則表達式;

public class Demo7_Regex {

 public static void main(String[] args) {
 
  //需求:請按照疊詞切割:“sdqqfgkkkhjpppplk”;
  /*切割結果應爲:
   * sd
   * fg
   * hj
   * lk
   */
   
  String s="sdqqfgkkkhjpppplk";
  String regex="(.)\\1+";  //某一個字母如出現了超過一次作爲切割的字母
  
  String []arr=s.split(regex);
  for(int i=0;i<arr.length;i++) {
   System.out.println(arr[i]);
  }
 }
}

package 正則表達式;

public class Demo7_Regex {

 public static void main(String[] args) {
 
  /*
   * 需求:我我....我...我.要...要要...要學....學學..學.編..編編.編.程.程.程..程
    將字符串還原成:“我要學編程”。
   */
   
  String s="我我....我...我.要...要要...要學....學學..學.編..編編.編.程.程.程..程";
  String s2=s.replaceAll("\\.+","");  //將字符串中出現的.都去掉
  String s3=s2.replaceAll("(.)\\1+", "$1");  //將出現多於一次的任意一組都用這一組中的內容替換
                                             //$1代表第一組中的內容……$2代表第二組中的內容
  System.out.println(s3);
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章