常用类(下)
一、正则表达式
(一)概述
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
先举个例子来理解正则表达式:
案例演示
需求:校验qq号码.
1:要求必须是5-15位数字
2:0不能开头
import java.util.Scanner;
public class MyTest {
public static void main(String[] args) {
String regex="[1-9][0-9]{4,14}";//QQ号码的正则表达式
Scanner sc = new Scanner(System.in);
System.out.println("注册——请输入符合规则的QQ号码:");
String s = sc.nextLine();
boolean matches = s.matches(regex);//判断此字符串是否匹配给定的正则表达式
if(matches){
System.out.println("输入的QQ号码符合规则");
}else{
System.out.println("输入的QQ号码不符合规则");
}
}
}
(二)正则表达式的组成规则
以下规则字符在java.util.regex.Pattern
类中
1.字符
x 即字符 x。举例:‘a’表示字符a
\\ 反斜线字符。
\n 新行(换行)符 (’\u000A’)
\r 回车符 (’\u000D’)
2.字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母也包括在内
[0-9] 0到9的字符都包括
3.预定义字符类
. 即任何字符。
那么.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]包括下划线
4.边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi (空格问号分号都是单词边界)
5.Greedy 数量词
X? X出现一次或一次也没有 比如""空串 就是没有
X* X出现零次或多次 (大于等于1次 都算多次)
X+ X出现一次或多次
X{n} X出现恰好 n 次
X{n,} X出现至少 n 次
X{n,m} X出现至少 n 次,但是不超过 m 次
案例演示
public class MyTest1 {
public static void main(String[] args) {
String regex = "a";
regex = "[abcdef]"; //允许出现列表中的某一个字符
regex = "[a-z]";//允许出现26个小写字母的任意一个
regex = "[A-Za-z]";//允许出现大小写字母任意一个
regex = "[0-9]";//允许出现0-9任意一个
regex = "[a-zA-Z0-9]";//允许出现大小写字母或0-9任意一个
regex = "[^0-9]"; //^不允许出现列表中的任意一个
regex = ".";//通配单个任意字符
regex = "\\.";// \\转义字符 \\.这个意思就是匹配点.本身
regex = "\\|"; //由于|本身代表或的意思,因此需要转义
regex = "\\d";//跟[0-9]意思一样
regex = "\\w";//跟[a-zA-Z_0-9]意思一样
regex = "[a-z]+"; // +可以出现一个或多个
regex = "a?"; //一次或一次也没有 比如 "" 空串 就是没有
regex = "[a-z]*";//零次或多次 (大于等于1次 都算多次)
regex = "[a-z]{6}";//a-z正好6个
regex = "[0-9]{6,}";//0-9的数至少6个
regex = "[0-9]{6,16}";//0-9的数大于等于6个小于等于16个
boolean flag = "123499988766454343".matches(regex);
System.out.println(flag);
}
}
(三)正则表达式的判断功能
public boolean matches(String regex)
判断此字符串是否匹配给定的正则表达式
案例演示
import java.util.Scanner;
public class MyTest {
public static void main(String[] args) {
String regex="[1][3|5|6|7|8|9][0-9]{9}";
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号码:");
String s = sc.nextLine();
boolean matches = s.matches(regex);//判断此字符串是否匹配给定的正则表达式
if(matches){
System.out.println("输入的手机号码符合规则");
}else{
System.out.println("输入的手机号码不符合规则");
}
}
}
(四)正则表达式的分割功能
String类的功能:public String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
案例演示1
有一个由个人信息组成的字符串,需要提取其中的有效信息。
public class MyTest {
public static void main(String[] args) {
String s="张三==23==男";
String regex="==";
String[] a = s.split(regex);
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
}
}
案例演示2
需求:我有如下一个字符串:”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: 创建一个StringBuilder对象,用来记录拼接的结果
- f: 遍历int类型的数组, 将其每一个元素添加到StringBuilder对象中
- g: 就是把StringBuilder转换成String
- h: 输出
import java.util.Arrays;
public class MyTest {
public static void main(String[] args) {
String s="91 27 46 38 50";
String regex=" ";
String[] a = s.split(regex);
int[] b=new int[a.length];
for (int i = 0; i < a.length; i++) {
b[i]=Integer.parseInt(a[i]);
}
Arrays.sort(b);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < b.length; i++) {
sb.append(b[i]).append(" ");
}
String s1 = sb.toString();
String s2 = s1.trim();//去掉右边的空格
System.out.println(s2);
}
}
案例演示3
去除数组中的重复元素
import java.util.Arrays;
public class MyTest {
public static void main(String[] args) {
int[] arr = {
10, 50, 60, 70, 80, 90, 100, 10, 50, 60, 70, 80, 90, 100, 10, 50, 60, 70, 80, 90, 100};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if(sb.indexOf(String.valueOf(arr[i]))==-1){
sb.append(arr[i]).append(" ");
}
}
String regex=" ";
String s = sb.toString();
String[] split = s.split(regex);
int[] a=new int[split.length];
for (int i = 0; i < split.length; i++) {
a[i]=Integer.parseInt(split[i]);
}
System.out.println(Arrays.toString(a));
}
}
案例演示4
给数组中添加一个元素
import java.util.Arrays;
public class MyTest {
public static void main(String[] args