文章目录
判断字符串是不是数字
传统写法
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
String str = "12023239023" ; // 全部由数字所组成
System.out.println(isNumber(str));
}
/**
* 该方法的主要功能是验证字符串是否全部由数字所组成
* 只要方法的返回值类型为boolean,一般都是以isXxx()的形式命名的
* @param message 要验证的字符串信息
* @return 如果字符串全部由数字所组成返回true,否则返回false
*/
public static boolean isNumber(String message) {
for (int x = 0 ; x < message.length() ; x ++) {
if (message.charAt(x) < '0' || message.charAt(x) > '9') { // 不是数字编码
return false ; // 后面就不再需要进行验证了
}
}
return true ; // 如果没有问题返回一个true,表示验证正确
}
}
正则表达式实现
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
String str = "12023239023" ; // 全部由数字所组成
System.out.println(str.matches("\\d+")); // 正则验证
}
}
正则表达式的历史
常用的正则标记
1单个字符匹配
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
String str = "a" ; // 字符串
System.out.println(str.matches("a")); // 正则验证
}
}
下面只写核心代码,main方法略。
String str = "\\" ; // 字符串
// "\\\\"正确的字符串定义描述的是“\\”,但是“\\”如果要变为正则的匹配那么最后转换为“\”
System.out.println(str.matches("\\\\")); // 正则验证
String str = "a\t" ; // 字符串
System.out.println(str.matches("a\t")); // 正则验证
String str = "yootk\n" ; // 字符串
System.out.println(str.matches("yootk\n")); // 正则验证
2字符范围(未加入任何的量词描述,只表示1位)
指定字母集合中的任意一个字符
String str = "k" ; // 字符串
System.out.println(str.matches("[yotk]")); // 正则验证
不包含指定字母(反)
String str = "m" ; // 字符串
System.out.println(str.matches("[^yotk]")); // 正则验证
匹配a-z A-Z所有字母[a-zA-Z]
String str = "M" ; // 字符串
System.out.println(str.matches("[a-zA-Z]")); // 正则验证
3.简化表达式
.
表示任意的字符
String str = "1" ; // 字符串
System.out.println(str.matches(".")); // 正则验证
\d
匹配任意的一位数字,等价于[0-9]
String str = "1" ; // 字符串
System.out.println(str.matches("\\d")); // 正则验证
\D
匹配任意的一位非数字,等价于[^0-9]
String str = "a" ; // 字符串
System.out.println(str.matches("\\D")); // 正则验证
\s
匹配任意空格
String str = "\n" ; // 字符串
System.out.println(str.matches("\\s")); // 正则验证
\S
匹配任意非空格,等价于[^\s]
String str = "\n" ; // 字符串
System.out.println(str.matches("\\S")); // 正则验证
\w
匹配字母、数字、下划线
String str = "1" ; // 字符串
System.out.println(str.matches("\\w")); // 正则验证
\W
非匹配字母、数字、下划线等价于[^\w]
String str = "1" ; // 字符串
System.out.println(str.matches("\\W")); // 正则验证
4.边界匹配
Java中使用不明显。
5.数量表达式(所有的表达式只有与数量匹配之后才可以描述多个字符)
?
表示该正则表达式匹配之后可以描述多个字符
String str = "" ; // 字符串
System.out.println(str.matches("\\w?")); // 正则验证
*
出现0次、1次或者多次
String str = "aaaaa" ; // 字符串
System.out.println(str.matches("\\w*")); // 正则验证
+
出现1次或者多次
String str = "a" ; // 字符串
System.out.println(str.matches("\\w+")); // 正则验证
{n}
正好出现n次
String str = "yootk.com" ; // 字符串
System.out.println(str.matches("\\w{5}")); // 正则验证
{n,}
正好出现n次以上
String str = "yootk_com" ; // 字符串
System.out.println(str.matches("\\w{5,}")); // 正则验证
{n,m}
出现n~m次
6.逻辑运算(可以连接多个正则表达式)
String str = "yootk.com" ; // 字符串
System.out.println(str.matches("yootk.+")); // 正则验证
String str = "yootk.com" ; // 字符串
System.out.println(str.matches("yootk|.+")); // 正则验证
正则表达式实例
去除非字写字母的字符
String str = "yU*()&*()#@JKILoFFLKFSD*()*(*(o*()@#*()@#*()@#t*()#U*()@$@#@k.com" ; // 字符串
String regex = "[^a-z]" ; // 定义正则表达式
System.out.println(str.replaceAll(regex, "")); // 正则验证
按数字拆分字符串
String str = "yootk.com828238edu.yootk.com8923892389yootk.ke.qq.com" ; // 字符串
String regex = "\\d+" ; // 定义正则表达式
String result [] = str.split(regex) ; // 正则拆分
for (String temp : result) {
System.out.println(temp);
}
数值格式化之前校验
String str = "9889118" ; // 字符串
String regex = "\\d+" ; // 定义正则表达式
if (str.matches(regex)) { // 是否符合于正则规则
System.out.println("【字符串转换数字】" + Integer.parseInt(str));
} else {
System.out.println("【ERROR】当前的字符串不符合正则规则,无法转换为int型");
}
日期格式化正则校验
import java.time.LocalDateTime;
import java.util.Date;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public static DateTimeFormatter datetimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") ;
public static ZoneId zoneId = ZoneId.systemDefault() ; // 获取当前时区的ID
public static void main(String[] args) throws Exception {
String str = "1998-02-19 21:15:23" ; // 字符串
String dateRegex = "\\d{4}-\\d{2}-\\d{2}" ; // 日期正则匹配
String datetimeRegex = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}" ; // 日期时间正则匹配
if (str.matches(dateRegex)) {
LocalDate localDate = LocalDate.parse(str, dateFormatter) ;
Instant instant = localDate.atStartOfDay().atZone(zoneId).toInstant() ;
Date date = Date.from(instant) ;
System.out.println("【字符串转日期】" + date);
}
if (str.matches(datetimeRegex)) {
LocalDateTime localDateTime = LocalDateTime.parse(str, datetimeFormatter) ;
Instant instant = localDateTime.atZone(zoneId).toInstant();
Date date = Date.from(instant) ;// 转换
System.out.println("【字符串转换日期时间】" + date);
}
}
}
匹配电话号码
String str = "008611066789109" ; // 字符串
String regex = "((\\+|00)\\d{2})?\\d{11}" ; // 日期正则匹配
System.out.println(str.matches(regex));
匹配邮箱
String str = "muyan.yootk-lixinghua@yootk.com" ; // 字符串
String regex = "[a-zA-Z_][a-zA-Z0-9\\-_\\.]+@[a-zA-Z0-9\\-]+\\.(com|com\\.cn|net|net\\.cn|gov|edu)" ; // 日期正则匹配
System.out.println(str.matches(regex));
匹配内部并输出
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
String sql = "INSERT INTO dept(deptno,dname,loc) VALUES (#{deptno}, #{dname}, #{loc})" ; // 字符串
String regex = "#\\{\\w+\\}" ; // 日期正则匹配
Pattern pattern = Pattern.compile(regex) ; // 编译正则
Matcher matcher = pattern.matcher(sql) ; // 创建正则匹配对象
while(matcher.find()) {
String name = matcher.group(0) ;
System.out.print(name.replaceAll("#|\\{|\\}", "") + "、");
}
}
}
教程来源
官网:
沐言优拓https://www.yootk.com/
教程地址:
《【李兴华编程训练营】Java完全自学教程》
https://www.bilibili.com/video/BV1PE41187Vd