加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

编程算法基础-2.4正则表达式初步

发布时间:2020-12-14 01:47:54 所属栏目:百科 来源:网络整理
导读:2.4正则表达式初步 现代计算机大多数处理非数值任务 所以应当熟悉串的API 串的: 搜索 匹配 分隔 替换 处理工具:正则表达式regular expression 其发展已经相当成熟,几乎可以当做一门独立的语言 有一套完整的规则和独立的语法系统 Java内置了对正则的支持 J

2.4正则表达式初步

现代计算机大多数处理非数值任务

所以应当熟悉串的API

串的:

搜索 匹配 分隔 替换

处理工具:正则表达式regular expression

其发展已经相当成熟,几乎可以当做一门独立的语言

有一套完整的规则和独立的语法系统

Java内置了对正则的支持

Java串的API中涉及的正则表达式

Split

正则表达式应用——Split

package RegularExpression;
 
public class SplitTest {
    public static void main(String[] args) {
       String s = "abc  zyx aaa   bbb";//空格较多时,会产生空串
//     String s = "abc+zyx+aaa+bbb";
//     String ss[] = s.split(" {1,}");//" {1,}"正则写法,最少出现1次,最多出现任意多次(不谢就是任意多次)
       String ss[] = s.split(" +");//" +"和上面是同一个意思
       //如果用+作分隔符,则必须转义,
       //----- "+" 表示 "+"
       //----- "{" 表示 "{"
       //----- ""  表示 ""
      
       for(int i=0;i<ss.length;i++){
           System.out.println(ss[i]);
       }
    }
}
abc
zyx
aaa
bbb

//如果用+作分隔符,则必须转义

//----- "+" 表示 "+"

//----- "{" 表示 "{"

//----- ""表示 ""

Match

判断给定的字符串是否满足正则表达式

Excel地址规则

package RegularExpression;
 
public class MatchTest {
    public static void main(String[] args) {
       String s = "AB88";
       System.out.println(s.matches("[A-Z]{1,}[0-9]{1,}"));
       //"[A-Z]{1,}" 表示 A到Z出现了1次到无穷次,0到9出现了1次到无穷次
       //注:原视频中讲的有错误,在Excel中,列是26进制的从A到Z,然后是AA...AZ,然后是AAA,AAB.....
       //可以出现三次字母的,不信你自己去看Excel!
    }
}
true


可以用于:判断手机号,身份证号,年龄等一些需要用户输入的要素
,防止用户输入明显错误的信息

[A-Z]{1,5}方括号表示出现的内容,大括号表示出现的次数(量词

+ 表示 {1,} 最少一次

* 表示 {0,} 任意多次

? 表示 {0,1} 零次或一次

replaceAll

格式替换

2005-12-05à 05/12 2005年

/*
replaceAll
格式替换
2005-12-05    05/12 2005年
 
*/
package RegularExpression;
 
public class ReplaceAllTest {
    public static void main(String[] args) {
       // TODO Auto-generated method stub
       String s = "sdf jkjsd f2014-04-23我在写代码' ;d'dfs ";
//     s=s.replaceAll("[0-9]{4}-[0-9]{2}-[0-9]{2}","***");
      
       s=s.replaceAll("([0-9]{4})-([0-9]{2})-([0-9]{2})","$3/$2 $1年");
       //子组:在正则表达式中,用括号()括起来的部分称为子组
       //$1,表示第一个子组
       //$2,表示第二个子组
       System.out.println(s);
    }
}
sdf jkjsd f23/04 2014年我在写代码' ;d'dfs

// 子组 :在正则表达式中,用括号 () 括起来的部分称为子组

//$1,表示第一个子组

//$2,表示第二个子组

分散字符串

请把下列字符串分散为数字和字符构成的串

String s1 ="abc1234xyz667kkmd764tttt";

串由字母和数字间隔构成,要分离出所有的字母段和数字段,即:

abc

1234

xyz

667

kkmd

764

tttt

/*
 * 分散字符串
请把下列字符串分散为数字和字符构成的串
String s1 = "abc1234xyz667kkmd764tttt";
串由字母和数字间隔构成,要分离出所有的字母段和数字段,即:
abc
1234
xyz
667
kkmd
764
tttt
*/
 
package RegularExpression;
 
import java.util.ArrayList;
import java.util.List;
 
public class SplitString {
    public static void main(String[] args) {
       String s = "1234xyz667kkmd764tttt123";
       String []s1 = s.split("[a-z]+");//分别分割成两个字符串数组
       String []s2 = s.split("[0-9]+");
       List<String> list = new ArrayList<String>();
      
       if(Character.isLetter(s.charAt(0))){//如果以字母开头
           for(int i=0;i<s1.length-1;i++){
              list.add(s1[i]);//加到list里
              list.add(s2[i]);
           }
           if(Character.isLetter(s.charAt(s.length()-1))){//如果以字母结尾
              showSplit(list);
           }
           if(Character.isDigit(s.charAt(s.length()-1))){//如果以数字结尾
              list.add(s1[s1.length-1]);
              showSplit(list);
           }
       }
       if(Character.isDigit(s.charAt(0))){//如果以数字开头
           for(int i=0;i<s2.length-1;i++){
              list.add(s2[i]);
              list.add(s1[i]);
           }
           if(Character.isLetter(s.charAt(s.length()-1))){//如果以字母结尾
              list.add(s2[s2.length-1]);
              showSplit(list);
           }
           if(Character.isDigit(s.charAt(s.length()-1))){//如果以数字结尾
              list.add(s2[s2.length-1]);
              list.add(s1[s1.length-1]);
              showSplit(list);
           }
       }
    }
   
    public static void showSplit(List<String> list){
       for(int i=1;i<list.size();i++){
           System.out.println(list.get(i));
       }
    }
}
1234
xyz
667
kkmd
764
tttt
123

上述代码略显繁琐,若您有更好的想法欢迎留言。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读