正則表達式的分割功能
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);
}
}