正则表达式(只能操作字符串类型)
Regular Expression
校驗給定的字符串是否滿足某種格式要求(合同)
優點:能夠大大的簡化代碼量;
缺點:閱讀性比較差,不能夠精確到具體錯誤、只能測驗出有誤
用下面三個哪一個 要看最終要什么樣的數據類型
一、匹配
每種校驗使用兩種方法來做(正則表達式、傳統方法)
1、手機號碼校驗
普通寫法
import java.util.Scanner;public class Regex1 {public static void main(String[] args) {/*** 手機號格式:<br>* 159xxx 13xxx 18xxx 17xxx<br>* 1、必須為11位的純數字<br>* 2、第1個字符必須是1<br>* 3、第2個字符必須是3、5、7、8*/Scanner input = new Scanner(System.in);System.out.print("請輸入一個手機號碼:");String phone = input.next();// 1.計算字符串的長度int len = phone.length();if (len == 11) {// 滿足長度11位// 2、將字符串轉化成字符數組char[] chs = phone.toCharArray();// 3、判斷第1個字符是否是1if (chs[0] == '1') {// 滿足第1個字符是1// 4、判斷第2個字符是否是3/5/7/8if (chs[1] == '3' || chs[1] == '5' || chs[1] == '7' || chs[1] == '8') {// 5、判斷手機號碼后9位是否是數字boolean flag = true;// 手機號碼11位都是數字for (int i = 0; i < chs.length; i++) {if (!('0' <= chs[i] && chs[i] <= '9')) {// 當前不是數字flag = false;break;}}if (flag) {System.out.println("親,手機號碼格式正確!!!");} else {System.out.println("親,手機號碼必須全部為數字");}} else {System.out.println("親,你手機號碼有誤(第2個字母不正確)");}} else {System.out.println("親,您輸入的手機號碼有誤(第1個字符必須為1)");}} else {System.out.println("親,您輸入的手機號碼長度有誤!");}}}使用正則表達式
import java.util.Scanner;public class Regex2 {public static void main(String[] args) {/*** 手機號格式:<br>* 159xxx 13xxx 18xxx 17xxx<br>* 1、必須為11位的純數字<br>* 2、第1個字符必須是1<br>* 3、第2個字符必須是3、5、7、8*/// 字符串中只能有一個字符,并且這個字符只能是1String regex1 = "[1]";// 正則表達式String phone1 = "12";// 鍵盤錄入boolean flag1 = phone1.matches(regex1);// System.out.println("flag1=" + flag1);// 給定的字符串只能有1個字符,并且這個字符只能為3/5/7/8String regex2 = "[3578]";// 正則表達式String phone2 = "2";// 鍵盤錄入boolean flag2 = phone2.matches(regex2);// System.out.println("flag2=" + flag2);String regex3 = "[1][3578]";// 正則表達式String phone3 = "1";// 鍵盤錄入boolean flag3 = phone3.matches(regex3);// System.out.println("flag3=" + flag3);// String regex4 = "[0-9]";// 正則表達式String regex4 = "[a-zA-Z0-9]";// 正則表達式String phone4 = "N";// 鍵盤錄入boolean flag4 = phone4.matches(regex4);// System.out.println("flag4=" + flag4);String regex5 = "[0-9]{9}";// 正則表達式String phone5 = "12345a789";// 鍵盤錄入boolean flag5 = phone5.matches(regex5);// System.out.println("flag5=" + flag5);Scanner input = new Scanner(System.in);System.out.print("請您輸入手機號碼:");String phone = input.next();String regex = "[1][3578][0-9]{9}";boolean flag = phone.matches(regex);System.out.println(flag ? "手機號格式正確" : "手機號格式有誤,請您重新輸入!!!");}}2、QQ號校驗
校驗QQ號碼:
(1)、長度為5-12位
(2)、必須為純數字
(3)、第一個字母不能夠為0
3、身份證號校驗
校驗身份證:
(1)、長度為18位
(2)、前面17位必須為純數字
(3)、最后一位可以為X,也可以為數字
(4)、不用校驗出生日期等
4、郵箱
使用了RegexTool工具幫助查詢正則表達式
import java.util.Scanner;public class Regex7 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print("請輸入姓名:");String username = input.next();boolean flag1 = username.matches("[\\u4e00-\\u9fa5]+");System.out.println("flag1=" + flag1);System.out.print("請輸入郵箱:");String email = input.next();boolean flag2 = email.matches("\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+");System.out.println("flag2=" + flag2);}}5、測驗1
定義一個工具類(RegexTool),工具類中有很多常用的正則方法,方法如下:
(1)、isChinese():判斷一個字符串是否是中文,接收一個字符串類型參數,返回值類型為boolean
(2)、isEmail():判斷一個字符串是否是郵箱,接收一個字符串類型參數,返回值類型為boolean
(3)、isPhone():判斷一個字符串是否是手機號碼,接收一個字符串類型參數,返回值類型為boolean
(4)、isAge():判斷一個字符串是否是年齡(年齡只能為正整數),接收一個字符串類型參數,返回值類型為boolean
(5)、isIdCard():判斷一個字符串是否是身份證,接收一個字符串類型參數,返回值類型為boolean
要求:方法全部為靜態的。
/*** Project Name:dt65_chapter16* File Name:RegexTool.java* Package Name:cn.java.utils* Date:上午8:38:06* Copyright (c) 2021, bluemobi All Rights Reserved.* */package cn.java.utils;/*** Description: <br/>* Date: 上午8:38:06 <br/>* * @author LLL* @version* @see*/ public class RegexTool {/*** * Description: 判斷一個字符串是否全部是中文<br/>** @author LLL* @param txt* @return*/public static boolean isChinese(String txt) {// 靜態方法String regex = "[\\u4e00-\\u9fa5]+";if (txt == null) {System.err.println("親,字符串不能夠為null");return false;} // else {return txt.matches(regex);}return txt.matches(regex);// 實例方法}/*** * Description: 判斷給定的字符串是否是手機號<br/>** @author LLL* @param txt* @return*/public static boolean isPhone(String txt) {if (txt == null) {// 匹配使用matches方法,返回值類型為booleanreturn false;}return txt.matches("[1][3578]\\d{9}");}public static void main(String[] args) {} }Step1:util 放工具類
Step2:把代碼粘貼過去,打入名字后alt+/快捷鍵調出(只有eclipse有代碼就有!)
6、測驗2
從鍵盤錄入姓名(要求必須為中文)、郵箱、手機號、年齡、身份證號
要求:調用RegexTool類中的方法來校驗輸入的信息
二、切割
/*** Project Name:dt65_chapter16* File Name:Regex1.java* Package Name:cn.java.demo* Date:上午9:48:37* Copyright (c) 2018, bluemobi All Rights Reserved.* */package cn.java.demo;/*** Description: <br/>* Date: 上午9:48:37 <br/>* * @author LLL* @version* @see*/ public class Regex1 {public static void main(String[] args) {/*** 切割:所謂的切割是 將給定的字符串按照某種規則分割成多個子字符串*/String str1 = "張三,李四,王五,王二麻子"; //split(",")可以用,但統一加上\\String[] strings = str1.split("\\,");for (String temp : strings) {System.out.println(temp);}String str2 = "張三.李四.王五.王二麻子"; //split(".")不行,因為.在正則里表示任意字符,已經被使用了String[] strings = str1.split("\\.");for (String temp : strings) {System.out.println(temp);}String str3 = "張三 李四 王五 王二麻子 二狗子 趙六";String[] strings = str1.split("\\ ");for (String temp : strings) {System.out.println(temp);}String str4 = "張三 李四 王五 王二麻子 二狗子 趙六";String[] strings = str1.split("\\ +");for (String temp : strings) {System.out.println(temp);}String str5 = "張三-李四-王五-王二麻子";String[] strings = str1.split("\\-");for (String temp : strings) {System.out.println(temp);}}}張三 李四 王五 王二麻子三、替換
/*** Project Name:dt65_chapter16* File Name:Regex2.java* Package Name:cn.java.demo* Date:上午10:34:14* Copyright (c) 2018, bluemobi All Rights Reserved.* */package cn.java.demo;/*** Description: 替換<br/>* Date: 上午10:34:14 <br/>* * @author LLL* @version* @see*/ public class Regex2 {public static void main(String[] args) {// 15999999999/*** 替換:所謂的替換是將給定字符串中滿足正則要求的部分替換成指定的字符串。替換最終返回的結果類型為String*/String str1 = "倉橋家的東西不好吃,我們是綠茶店,我們的商品更好吃更優惠,聯系電話:15912345678";// 倉橋家 綠茶String str2 = str1.replaceAll("1[3578]\\d{9}", "15999999999");System.out.println(str2);}}疊詞
/*** Project Name:dt65_chapter16* File Name:Regex3.java* Package Name:cn.java.demo* Date:上午11:02:29* Copyright (c) 2018, bluemobi All Rights Reserved.* */package cn.java.demo;/*** Description: <br/>* Date: 上午11:02:29 <br/>* * @author 丁鵬* @version* @see*/ public class Regex3 {public static void main(String[] args) {/*** 治結巴:"我..我....我..我....喜...喜...喜....歡...編...編.編.編....程"===>"我喜歡編程"<br>* 疊詞:aa、aa、ccc*/String str1 = "我..我....我..我....喜...喜...喜....歡...編...編.編.編....程";// 1、第一次替換String str2 = str1.replaceAll("\\.+", "");System.out.println(str2);// 2、第2次替換/*** 疊詞的正則:(.)\\1+<br>* 獲取疊詞中的一個字符:$1<br>*/String str3 = str2.replaceAll("(.)\\1+", "$1");System.out.println("str3=" + str3);}}我我我我喜喜喜歡編編編編程 str3=我喜歡編程總結
以上是生活随笔為你收集整理的正则表达式(只能操作字符串类型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哇!家居环境居然能“可视化”?这守护真的
- 下一篇: Scrapy学习笔记5——Spiders