正则表达式的学习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);
  }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值