正则表达式
为什么需要正则表达式?
在实际开发中,我们常常需要做某些条件的判断,有些时候便会大量使用条件判断语句,这使得程序过于繁琐,这时候使用正则表达式就会使程序变得更加清晰。
package zhenze;
import java.util.Scanner;
public class CheckQQ {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的QQ号码:");
String qq=sc.nextLine();
System.out.println("checkQQ:"+check(qq));
}
public static boolean check(String s)
{
//先定义一个flag标志
boolean flag=true;
//判断长度是否是5到15位
if(s.length()>5&&s.length()<15) {
//判断是否以零开头
if(!s.startsWith("0")) {
//判断是否都是数字
char[] str=s.toCharArray();
for(int i=0;i<str.length;i++)
{
char ch=str[i];
if(!Character.isDigit(ch)) {
flag=false;
break;
}
}
}
else
flag=false;
}
else
flag=false;
return flag;
}
}
这段代码是判断一个QQ号码是否正确,使用了多次的if语句,显得程序过于繁琐,如果我们直接使用正则表达式就会变得清晰。
使用了正则表达式改进之后的代码
package zhenze;
import java.util.Scanner;
public class CheckQQ {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的QQ号码:");
String qq=sc.nextLine();
CheckQQ.check(qq);
}
public static void check(String s)
{
//[1-9]表示首位是1-9的任意数字不能为0,[0-9]表示除首位之外可以是0到9的任意数字,{4,14}是对[0-9]的修饰,表示符合[0-9]规则的数字可以有4到14个。
String regex= "[1-9] [0-9] {4,14}";
System.out.println(s.matches(regex));
}
}
正则表达式的分割功能:
来自String类的split简介:
public String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
例如,字符串 “boo:and:foo” 使用这些表达式可生成以下结果:
Regex 结果
: { “boo”, “and”, “foo” }
o { “b”, “”, “:and:f” }
参数:
regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
该方法的具体应用:
package zhenze;
import java.util.Scanner;
public class fenge {
public static void main(String[] args) {
//定义一个年龄搜索范围
String str="13-18";
//定义规则
String regex="-";
//调用方法 split(String regex):分割字符串
String[] strs=str.split(regex);
//遍历
// for(int i=0;i<strs.length;i++) {
// System.out.println(strs[i]);
// }
//如何得到int类型呢?
int startAge =Integer.parseInt(strs[0]);
int endAge =Integer.parseInt(strs[1]);
//键盘录入年龄
Scanner sc=new Scanner(System.in);
System.out.println("请输入年龄");
int age=sc.nextInt();
if(age<=startAge||age>=endAge) {
System.out.println("不是");
}
else
System.out.println("是");
}
}
正则表达式的应用:
package zhenze;
import java.util.Arrays;
import java.util.Scanner;
/*
*
* 字符串:"91 34 56 78"
* 请写代码实现最终输出结果是:"34 56 78 91"
* A:定义一个字符串
* A:将字符串分割
* B:将字符数组转换为整型数组
* C:数组排序
* D:将排序后的数组组装为字符串数组
* E:将字符串数组转换为字符串
*
*
*
*
* */
public class fenge {
public static void main(String[] args) {
String str="91 34 56 78";
//将字符串分割
String reget=" ";
String[] array=str.split(reget);
//将分割后的字符数组转换为整型数组
int[] arrayint=new int[array.length];
for(int i=0;i<array.length;i++) {
arrayint[i]=Integer.parseInt(array[i]);
}
//对整型数组进行排序
Arrays.sort(arrayint);
//将排序后的整型数组组装为一个字符串
StringBuilder sb=new StringBuilder();
for(int x=0;x<arrayint.length;x++) {
sb.append(arrayint[x]).append(" ");
}
//将字符数组转换为字符串
String s=sb.toString();
//去除前后空格
s.trim();
System.out.println(s);
}
}