String 类对正则表达式的支持和java.util.regex开发包

一:JDK1.4之后我们可以直接通过String类来进行正则的调用,String类中有如下方法支持正则的开发:

  1. public boolean matches(String regex)进行字符串验证,匹配某个正则
  2. public String replaceALL(String regex,String replacement):根据正则的描述替换全部;
  3. public String replaceFirst(String regex,String replacement):根据正则的描述替换首个;
  4. public String[] split(String regex):根据正则进行全部拆分;
  5. public String[] split(String regex,int limit):部分拆分;

下面进行相关示例

1.字符串的替换:将非字母的字符替换为空

1 public class Demo {
2     public static void main(String[] args) {
3         String str = "gicb*&FAZjncv$#n123hcc";
4         String regex = "[^a-zA-Z]";//匹配非字母的字符
5         System.out.println(str.replaceAll(regex, ""));
6     }
7 }

结果为:gicbFAZjncvnhcc

2.字符串的拆分:

 1 public class Demo {
 2     public static void main(String[] args) {
 3         String str = "gicb15bjs6sfc77wws";
 4         String regex = "\\d+"; // 等价与[0-9]+,+表示该正则出现一次或多次
 5         String result[] = str.split(regex);//根据正则来拆分成数组
 6         for (int x = 0; x < result.length; x++) {
 7             System.out.println(result[x]);//遍历输出该数组
 8         }
 9     }
10 }

结果为:

gicb
bjs
sfc
wws

3.验证某一字符串是否是数字(整数或小数),如果是则将其变成double类型

 1 public class Demo {
 2     public static void main(String[] args) {
 3         String str = "16.8";
 4         String regex = "\\d+(\\.\\d+)";
 5         System.out.println(str.matches(regex));//判断
 6         if (str.matches(regex)) {
 7             System.out.println(Double.parseDouble(str));//转换为double类型
 8         }
 9     }
10 }
View Code

结果为:

true
16.8

4.判断某一字符串是否是日期或日期时间,如果是则将其变成Date类型

public class Demo {
    public static void main(String[] args) throws ParseException {
        String str = "2018-10-22 10:21:30";
        String regex = "\\d{4}-\\d{2}-\\d{2}";
        System.out.println(str.matches(regex));//判断是否匹配
        if (str.matches(regex)) {
            System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse(str));//转换为Date类型
        }else if (str.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) {
            System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(str));//转换为Date类型
        }
    }
}

结果为:

false
Mon Oct 22 10:21:30 GMT+08:00 2018

此时这种需要转换的前提下,对于正则的格式判断最好分开编写(if...elseif...)

5.判断给定的电话号码的格式是否正确(用一个正则进行判断)

  • 电话格式一:52636898【\\d{7,8}】
  • 电话格式一:01052636898【(\\d{3,4})?\\d{7,8}】
  • 电话格式一:(010)-52636898【((\\(\\d{3,4}\\)-)|(\\d{3,4}))?\\d{7,8}】

6.验证给定的字符串是否是Email地址

         要求:用户名要求由数字、字母、_组成,其中必须以字母开头,结尾可以有字母和数字,用户名最多不超过15位,最后的根域名只能够是.com.net.cn 、com.cn、  net.cn、 .edu、  .gov、  .org

public class Demo {
    public static void main(String[] args) throws ParseException {
        String str = "[email protected]";
        String regex = "[a-zA-Z][a-zA-Z0-9_\\.]{5,14}[a-zA-Z0-9]@\\w+\\.(net|cn|com|com\\.cn|net\\.cn|org|gov|edu)";
        System.out.println(str.matches(regex));//判断是否与正则匹配
    }
}
结果为:true

二:java.util.regex开发包

  此包中有如下三个类,当需要复杂化正则应用时,用到该开发包。

    • Pattern 类:
      pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

    • Matcher 类:
      Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

    • PatternSyntaxException:
      PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

1.Pattern类中的方法:

  • 取得实例化对象:public static Pattern compile(String regex);
  • 拆分字符串:public String[ ] split(CharSequence input);
  • 取得Matcher类对象:public Matcher matcher(CharSequence input);

小例子:通过Pattern类进行字符串拆分

public class Demo {
    public static void main(String[] args) throws ParseException {
        String str = "a|b|c";
        String regex = "\\|";
        Pattern  pattern = Pattern.compile(regex);  //取得实例化对象
        String []result = pattern.split(str);   //拆分结果放在字符串类型的数组里
        for(int i=0;i<result.length;i++) {   //循环输出拆分后的结果
            System.out.println(result[i]);
        }
    }
}

2.Matcher类负责进行正则匹配:

  Matcher类没有提供什么静态方法,通过调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象,如:

    Pattern pattern = Pattern.compile("regexoo");

    Matcher matcher = pattern.matcher("string");
此时我们就得到了一个Matcher对象,通过此对象就可以对字符串进行操作了

Matcher类常用的方法:
(1)索引方法(精确表明输入字符串中在哪能找到匹配)

  • public int start() 返回以前匹配的初始索引
  • public int end() 返回最后匹配字符之后的偏移量。

(2)研究方法(用来检查输入字符串并返回一个布尔值,表示是否找到该模式)

  • public boolean lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。
  • public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。
  • public boolean matches() 尝试将整个区域与模式匹配。

(3)替换方法(替换输入字符串里文本的方法)

  • public String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。
  • public String replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列。

猜你喜欢

转载自www.cnblogs.com/zy618-fighting/p/9826992.html
今日推荐