01_正则表达式
01.1_定义:就是,描述这些规则的语法
正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式方法中应用,才能实现对字符串的匹配、查找、替换及分割等操作。
案例演示:用非正则表达式实现
package RegxDemo01;
import java.util.Scanner;
//正则表达式
public class RegxTest01 {
public static void main(String[] args) {
/* 校验qq号码.
1:要求必须是5-15位数字
2:0不能开头*/
//非正则表达式实现
Scanner scanner = new Scanner(System.in);
System.out.println("输入qq号");
String qqnum=scanner.nextLine();
//调用校验方法
boolean check=checkQQnum(qqnum);
if(check)
System.out.println("输入正确");
else
System.out.println("输入错误");
}
private static boolean checkQQnum(String qqnum) {
//定以规则
boolean check=false;
if(qqnum.length()>=5&&qqnum.length()<=15&&!qqnum.startsWith("0")){
//判断每一位字符
for (int i = 0; i < qqnum.length(); i++) {
char ch=qqnum.charAt(i);
if(!Character.isDigit(ch)){//确定指定字符是否为数字。
check=true;
break;
}else{
check=true;
}
}
}
return check;//如果第一个条件满足不了,直接返回false
}
}
使用正则表达式
package RegxDemo01;
import java.util.Scanner;
//正则表达式
public class Refxtest01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入qq号");
String qqnum=scanner.nextLine();
//调用校验方法
boolean check=checkQQnum(qqnum);
if(check)
System.out.println("输入正确");
else
System.out.println("输入错误");
}
private static boolean checkQQnum(String qqnum) {
//用正则表达式表示
String regx="[1-9][0-9]{4,14}";
boolean b=qqnum.matches(regx);
return b;
}
}
01.3_案例演示2
非正则表达式
package RegxDemo01;
import java.util.Scanner;
public class RegxTest02 {
public static void main(String[] args) {
//校验手机号的规则
// 手机号 11 位 第一位是 1 第二位 3 5 7 8 其余位随意数字 手机号每一位都是数字。
Scanner sc = new Scanner(System.in);
System.out.println("请输入的你的手机号");
String phoneNumber = sc.nextLine();
boolean flag = checkphoneNumber(phoneNumber);
if (flag) {
System.out.println("手机号规则正确");
} else {
System.out.println("手机号规则错误");
}
}
private static boolean checkphoneNumber(String phoneNumber) {
boolean flag = false;
if (phoneNumber.length() == 11 && phoneNumber.startsWith("13") || phoneNumber.startsWith("15") || phoneNumber.startsWith("17") || phoneNumber.startsWith("18")) {
for (int i = 2; i < phoneNumber.length(); i++) {
char ch = phoneNumber.charAt(i);
if (!Character.isDigit(ch)) {
flag = false;
break;
} else {
flag = true;
}
}
}
return flag;
}
}
正则表达式
package RegxDemo01;
import java.util.Scanner;
//正则表达式,手机号案例
public class Regextest02 {
public static void main(String[] args) {
//校验手机号的规则
// 手机号 11 位 第一位是 1 第二位 3 5 7 8 其余位随意数字 手机号每一位都是数字。
Scanner scanner = new Scanner(System.in);
System.out.println("输入qq号");
String qqnum=scanner.nextLine();
//调用校验方法
boolean check=checkQQnum(qqnum);
if(check)
System.out.println("输入正确");
else
System.out.println("输入错误");
}
private static boolean checkQQnum(String qqnum) {
String Regex="[1][3578][0-9]{9}";
boolean b=qqnum.matches(Regex);
return b;
}
}
01.4_正则表达式的组成规则
规则字符在java.util.regex Pattern类中
字符
x 字符 x。举例:'a'表示字符a
\\ 反斜线字符。
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
[0-9] 0到9的字符都包括
预定义字符类
. 任何字符。我的就是.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
\s 匹配空格字符
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi
Greedy 数量词
X? X,一次或一次也没有 比如""空串 就是没有
X* X,零次或多次 大于等于1次 都算多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
01.5_正则表达式的分割功能
String类的功能:public String[] split(String regex)
package RegxDemo01;
import java.util.Arrays;
//正则表达式分割功能
public class Regectest06 {
public static void main(String[] args) {
String str="输入=你要=搜索的=内容";
//得到一句在这里输入你要搜索的内容,对字符串进行截取
//方法1含头不含尾
String get=str.substring(0,str.indexOf("="));
System.out.print(get);
String get1=str.substring(str.indexOf("=")+1,str.indexOf("搜")-1);
System.out.print(get1);
String get2=str.substring(str.indexOf("搜"),str.lastIndexOf("="));
System.out.print(get2);
String get3=str.substring(str.lastIndexOf("=")+1);
System.out.print(get3);//输入你要搜索的内容
System.out.println("------------------------------------");
//方法2根据正则来切割这个字符串,返回的是一个字符串数组。
String[] split = str.split("=");
System.out.print(split[0]);
System.out.print(split[1]);
System.out.print(split[2]);
System.out.print(split[3]);
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
String names2 = "张三assdfa=12542242assadfafasdf2411李四asdfdadsf25244=asdfasdf25411王五";
//截取字母
String[] split1 = names2.split("[a-z=0-9]+");//地址
System.out.print(split1[0]);
System.out.print(split1[1]);
System.out.print(split1[2]);
}
}
01.6_把给定字符串中的数字排序
package RegxDemo01;
import java.util.Arrays;
//正则表达式分割功能
public class Regectest06 {
public static void main(String[] args) {
/* A:
案例演示:
需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
* 分析:
* a: 定义目标字符串"91 27 46 38 50"
* b: 对这个字符串进行切割,得到的就是一个字符串数组
* c: 把b中的字符串数组转换成int类型的数组
* (1): 定义一个int类型的数组,数组的长度就是字符串数组长度
* (2): 遍历字符串数组,获取每一个元素.将其转换成int类型的数据
* (3): 把int类型的数据添加到int类型的数组的指定位置
* d: 排序
* e:
* f: 遍历int类型的数组, 将其每一个元素添加到StringBuilder对象中
* g: 就是把StringBuilder转换成String
* h: 输出
*/
String str1="91 27 46 38 50";
String[] split2 = str1.split("\\s+");//\s匹配空格字符
System.out.println(Arrays.toString(split2));//[91, 27, 46, 38, 50]
//定义一个int数组
int[] arr = new int[split2.length];
//遍历字符串
for (int i = 0; i < arr.length; i++) {
//转换为int类型的数据
arr[i] = Integer.parseInt(split2[i]);
}
//排序int数组
Arrays.sort(arr);// 对指定的 int 型数组按数字升序进行排序。
System.out.println(Arrays.toString(arr));//[27, 38, 46, 50, 91]
//创建一个StringBuilder对象,用来记录拼接的结果
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
stringBuffer.append(arr[i]).append(" ");
}
System.out.println(stringBuffer.toString().trim());//去掉首尾空格27 38 46 50 91
}
}
01.7_正则表达式的替换功能
String类的功能:public String replaceAll(String regex,String replacement)
/* A:
正则表达式的替换功能
String类的功能:public String replaceAll (String regex, String replacement)*/
String str2="225222asdfa你22222222好asdfassdfhahehhasd阿斯顿asdf发放阿asdfasdf斯顿发顺丰啊手动阀dssdfsdfsfd124574544";
//保留上面字符串中的中文字符
String s = str2.replaceAll("[a-z0-9]", "");
System.out.println(s);