正则表达式:
(1) 正则表达式:符合一定规则的字符串
案例:(用正则和代码两种方式实现)键盘录入qq号码,校验QQ号码。要求:
1: 要求必须是5-15位数字
2: 0不能开头
3: 每一位的字符必须是数字
package com.edu.regex1;
import java.util.Scanner;
public class RegexDemo {
public static void main(String[] args) {
/**
* 分析:(封装一个方法,这个方法的返回值是布尔类型,参数就是qq号码)
1.判断qq号码的长度,5-15位之间
2.不能以0开头
3.每一位的字符必须是数字
*/
System.out.println("请输入你需要校验的qq号码");
Scanner sc = new Scanner(System.in);
String qq = sc.nextLine();
//将获取到的qq号码传递给我这个方法
//方式1:使用代码进行校验qq号码
System.out.println(isCheck(qq));
//方式2:使用正则表达式校验qq号码
System.out.println(isCheck2(qq));
}
private static boolean isCheck2(String qq) {
//定义一个校验qq号码的正则表达式,
//这个正则表达式就是符合我的qq号码的校验规则的正杂表达式
String reg = "[1-9][0-9]{4,14}";
//使用正则表达式校验我的qq号码
boolean flag = qq.matches(reg);
return flag;
}
private static boolean isCheck(String qq) {
//定义一个标记
boolean flag = true;
//在这里进行校验判断,但凡有一个条件不满足,就更该flag的值为false
//1.判断qq号码的长度,5-15位之间
if (qq.length()>=5&&qq.length()<=15) {
//2.不能以0开头
if (!qq.startsWith("0")) {
//3.每一位的字符必须是数字
char[] qqChs = qq.toCharArray();
//遍历字符数组
for (int i = 0; i < qqChs.length; i++) {
if (Character.isDigit(qqChs[i])) {
}else {
flag = false;
}
}
}else {
flag = false;
}
}else {
//更改flag的值
flag = false;
}
return flag;
}
}
(2) 规则字符在java.util.regex Pattern类中
A:字符
x 字符x(举例:a,1)
\ 反斜线字符
B:字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[0-9] 0-9字符
C:预定义字符类
. 任何字符
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
D:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
(3)
判断功能:
public boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
例题:
package com.edu.regex1;
public class RegexDemo2 {
public static void main(String[] args) {
/**
* 需求1:找出规则,校验电话号码
* 13245678901 13332345678 13456789012 18812345678
* 18999999999 18666666666 18786868686
*/
String number = "13245678901";
//正则表达式
String reg = "1[38][0-9]{9}";
//调用maches(String reg)进行判断指定字符串是否匹配指定的正则表达式
boolean flag = number.matches(reg);
System.out.println(flag);
}
}
例题:
package com.edu.regex1;
public class RegexDemo3 {
public static void main(String[] args) {
/**
*需求2:找出规则,校验邮箱
sunmeng@163.com
zhangsan@126.com
lisi@sina.cn
wxd1221@sina.com.cn
csf@gmail.net
1512345@qq.com
*/
String email = "zhangsan@126.com";
//写一个正则表达式验证这些个邮箱
String reg = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,8}(\\.[comnet]{2,3})+";
//依据正则表达式来验证上面的邮箱
System.out.println(email.matches(reg));
}
}
(4)
分割功能
public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
例题:
package com.edu.regex1;
public class RegexDemo4 {
public static void main(String[] args) {
/**
* public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。
* 需求1:
分割如下字符串:
String s = "aa,bb,cc";
String s2 = "aa.bb.cc";
String s3 = "aa bb cc";
String s4 = "aa bb cc";
String s5 = "D:\\baidu\\20160826\\day14";
*/
String s = "aa,bb,cc";
//定义一个可以匹配到,的正则表达式
String reg = ",";
//使用split(String reg)切割字符串
String[] strs = s.split(reg);
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
System.out.println("----------------");
String s2 = "aa.bb.cc";
String reg2 = "\\.";
String[] strs2 = s2.split(reg2);
for (int i = 0; i < strs2.length; i++) {
System.out.println(strs2[i]);
}
System.out.println("----------------");
String s3 = "aa bb cc";
String reg3 = " ";
String[] strs3 = s3.split(reg3);
for (int i = 0; i < strs3.length; i++) {
System.out.println(strs3[i]);
}
System.out.println("----------------");
String s4 = "aa bb cc";
String reg4 = " +";
String[] strs4 = s4.split(reg4);
for (int i = 0; i < strs4.length; i++) {
System.out.println(strs4[i]);
}
System.out.println("----------------");
String s5 = "D:\\baidu\\20160826\\day14";
String reg5 = "\\\\";
String[] strs5 = s5.split(reg5);
for (int i = 0; i < strs5.length; i++) {
System.out.println(strs5[i]);
}
}
}
例题:
package com.edu.regex1;
import java.util.Arrays;
public class RegexDemo5 {
public static void main(String[] args) {
/**
* 需求2:
我有如下一个字符串:”91 27 46 38 50”
请写代码实现最终输出结果是:”27 38 46 50 91”
*/
//切割字符串
String s = "91 27 46 38 50";
String reg = " ";
String[] strs = s.split(reg);
//遍历字符串数组,并定义一个int[]
int[] arr = new int[strs.length];
for (int i = 0; i < strs.length; i++) {
arr[i] = Integer.parseInt(strs[i]);
}
//排序int[]
Arrays.sort(arr);
//遍历数组
StringBuffer sb = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]+" ");
}
//将sb转换为String类型
System.out.println(sb.toString());
}
}
(5)
替换功能
public String replaceAll(String regex,String replacement):把符合regex的用replacement替换。
package com.edu.regex1;
public class RegexDemo6 {
public static void main(String[] args) {
//需求:字符串中的数字使用*代替
String s = "我的银行卡号是:6102344354565";
String reg = "[0-9]";
String newStr = s.replaceAll(reg, "*");
System.out.println(newStr);
}
}