?指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串,其实就是一种规则,有自己特殊的应用
作用:注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的
校验号码,要求必须是5-15位数字,0不能开头,必须都是数字
不用正则表达式的代码实现?
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要校验的qq号");
String s = sc.nextLine();
System.out.println(qq(s));
}
public static boolean qq(String qq) {
boolean flag = true;
if(qq.length()>=5 && qq.length() <= 15) {
if(!qq.startsWith("0")) {
char[] arr = qq.toCharArray();
for (int i=0;i<arr.length;i++) {
char ch=arr[i];
if(!(ch>='0'&&ch<='9')) {
flag = false;
break;
}
}
}else {
flag = false;
}
}
else {
flag = false;
}
return flag;
}
}
正则表达式代码
import java.util.Scanner;
public class biaodashi {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要校验的qq号");
String s = sc.nextLine();
String regex = "[1-9]\\d{4,14}";
System.out.println(s.matches(regex));
}
}
常见对象字符类
[代表单个字符
[a,b,c]a,b或c(简单类)
[^abc]任何字符除了ab或c(否定)
[a-zA-Z]a到z或者A到Z两头的字母包含在内
[a-d[m-p]]a到d或者m-p
[a-z&&[def]]d,e或f交集
[a-z&&[^bc]]a-z除了b或c
[a-z&&[^m-p]]a-z而非m-p
预定义字符类?
\代表转义字符,如果想要表示\d的话需要\\d
\d数字[0-9]
\D非数字[^0-9]
\s空白字符[\t\n\x0B\f\r]
\S非空白字符[^\s]
\w单词字符[a-zA-z_0-9]
\W非单词字符[^\w]
数量词
X?X? ? 一次或一次也没有
X*X? ? ? ?零次或多次
X+X? ? ? ?一次或多次
X{n}X? ? 恰好n次
X{n,}X? 至少n次
X{n,m}X 至少n次最多m次
正则表达式的分割功能
public class demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "金顶点 郭aa 李daone";
String[] arr = s.split(" ");
for(int i =0 ;i <arr.length;i++) {
System.out.println(arr[i]);
}
}
//.代表任意字符,非要用的话要用\\.
}
?把给定字符串中的数字排序
将字符串“91? ? ?27? ? 46? ? ? 38? ? 50”排序输出
import java.util.Arrays;
public class demo7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = "91 27 46 38 50";
String[] arr1 = s.split(" ");
int[] arr = new int[arr1.length];
for (int i = 0;i<arr1.length;i++) {
arr[i] = Integer.parseInt(arr1[i]);
}
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for(int i=0;i<arr.length;i++) {
if(i==arr.length-1) {
sb.append(arr[i]);
}
else {
sb.append(arr[i]+" ");
}
}
System.out.println(sb);
}
}
?后面用string字符串接收的话会产生许多垃圾啊,用StringBuilder更节省空间
正则表达式的替换功能
public String replace(String reqex,String replacement)
public class demo2 {
public static void main(String[] args) {
String s = "park11chan27yeol";
String regex = "\\d";
String s2 = s.replaceAll(regex, "");
System.out.println(s2);
}
}
?正则表达式的分组功能
((A)(B(C)))
(A
(B(C))
(C)
例题:
分割叠词?
public class Music {
public static void main(String[] args) {
//叠词分割 快快乐乐,高高兴兴
String regex ="(.)\\1(.)\\2"; //1代表第一组又出现一次
System.out.println("快快乐乐".matches(regex));
System.out.println("快乐乐乐".matches(regex));
//叠词分割 ABAB
String regex1="(..)\\1";
System.out.println("啊哈啊哈".matches(regex1));
System.out.println("________________________________________");
//按照叠词切割sdqqfgkkkhjppppkl
String s ="sdqqfgkkkhjppppkl";
String regex2="(.)\\1+"; //+代表第一组出现一次到多次
String[] arr=s.split(regex2);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("_________________________________________________");
//替换:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程..程还原至我要学编程
String s1="我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程..程";
String s2=s1.replaceAll("\\.+","");
String s3=s2.replaceAll("(.)\\1+", "$1"); //$1代表第一组中的内容
System.out.println(s3);
}
}
|