概述
常见对象(正则表达式的概述和简单使用)
正则表达式:
正确规则的表达式,规则是java给我们定的,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
代码示例:
需求:校验qq号码:
-
要求必须是5-15位数字
-
0不能开头
非正则表达式实现:
private static boolean checkQQ(String numQQ) { // 校验位数 boolean b = false; // 判断长度 if (numQQ.length() >= 5 && numQQ.length() <= 15) { // 判断开头不能为0 if (!(numQQ.startsWith("0"))) { // 判断每一位是不是数字 for (int i = 0; i < numQQ.length(); i++) { char ch = numQQ.charAt(i); if (ch >= '0' && ch <= '9') { b = true; } else { b = false; break; //一旦遇到不是数字的,就结束循环 } } } else { b = false; } } else { b = false; } return b; }
如果要检验一串字符串是否符合定好的规则,可以使用类似上述的代码来逐条规则判断,但是太麻烦,所以Java中提供了正则表达式来完成我们这方面的需求
常见对象(正则表达式的组成规则)
规则字符在java.util.regex Pattern类中
字符:
-
x 字符 x。举例:'a’表示字符a
-
\反斜线字符。
-
n 新行(换行)符 (’u000A’)
-
r 回车符 (’u000D’)
字符类:
-
[abc] a、b 或 c,只能匹配单个字符
-
[^abc] 任何字符,除了 a、b 或 c(否定)
-
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
-
[0-9] 0到9的字符都包括
预定义字符类:
-
. 任何字符。我的就是.字符本身,怎么表示呢? .
-
d 数字:[0-9]
-
w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须有这些东西组成
边界匹配器:
-
^ 行的开头
-
$ 行的结尾
-
b 单词边界,就是不是单词字符的地方。
举例:hello world?haha;xixi
Greedy 数量词 :
-
X? X一次或一次也没有, 比如""空串 就是没有,最多一次
-
X* X零次或多次 大于等于1次 都算多次
-
X+ X一次或多次
-
X{n} X恰好 n 次
-
X{n,} X至少 n 次
-
X{n,m} X至少 n 次,但是不超过 m 次
常见对象(正则表达式的判断功能)
正则表达式的判断功能:
String类的功能:public boolean matches(String regex)
在知道了正则表达式的格式和判断功能后,就可以对前面的判断QQ号是否符合规则的代码进行改进
改进如下:
private static boolean checkQQNum2(String qqNum) {
//定义一个正则表达式
String regx = "[1-9][0-9]{4,14}";
boolean matches = qqNum.matches(regx); //调用判断功能并且返回一个布尔值
return matches;
}
第一个[1-9]
只能匹配单个字符,只能是1-9中的任意一个数字,第二个[0-9]{4,14}
是匹配后面的四个字符,大括号里面的数字表示0-9中的任意数字可以出现最少4次,最多14次,通过这样就可以判断字符串是否由5~15位数字构成且不以0开头,并且返回true
或者false
其他正则表达式(省略主方法):
String regx = "a"; //匹配这个正则表达式的字符串中只能有一个字符a
regx = "[abcdef]"; //运行出现列表中的某一个字符
regx = "[a-z]"; //允许出现26个小写字母的任意一个
regx = "[A-Za-z]";
regx = "[0-9]";
regx = "[a-zA-Z0-9]";
regx = "[^0-9]"; //把不允许出现我列表中的任意一个
regx = "."; //通配单个任意字符
regx = "\."; // \ 转意字符 \. 这个意思就是匹配点本身
regx = "\|";
regx = "\d"; //"跟"[0-9]意思一样
regx = "\w"; //跟 [a-zA-Z_0-9] 意思一样
regx = "[a-z]+"; //+ 可以出现一个或多个
regx = "a?"; //一次或一次也没有 比如 "" 空串 就是没有
regx = "[a-z]*"; //零次或多次 大于等于1次 都算多次
regx = "[a-z]{6}"; //正好6次
regx = "[0-9]{6,}"; //至少6个
regx = "[0-9]{6,16}"; //大于等于 6 小于等于16
boolean flag = "123499988766454343".matches(regx);
System.out.println(flag);
可以知道最终运行结果为false
常见对象(校验用户邮箱是否满足要求)
package org.westos.java;
import java.util.Scanner;
/**
* @Author: Administrator
* @CreateTime: 2019-05-01 13:48
*/
public class MyTest {
public static void main(String[] args) {
// 6 ~18 个字符,可使用字母、数字、下划线,需以字母开头
//邮箱示例:
//284309510@qq.com
//xibukaiyuan@163.com
//xibukaiyuan@sina.cn
//xibukaiyuan@sina.net
//xibukaiyuan@sina.org
String emailRegx = "[a-zA-Z]\w{5,17}@[1-9a-z]{3,16}\.(com|cn|net|org)";
boolean matches = "284309510@qq.com".matches(emailRegx);
System.out.println(matches);
}
}
注意,正则表达式中的最后一个圆括号中的内容为或,只要出现其中的任意一个就行,还要注意在.
前加上转义字符//
,否则会匹配成任意单个字符
常见对象(正则表达式的分割功能)
正则表达式的分割功能 split()方法
String类的功能:public String[] split(String regex)
代码示例1:
String str = "张三=男=23";
String[] strings = str.split("=");
System.out.println(strings[0]);
System.out.println(strings[1]);
System.out.println(strings[2]);
spilt
方法可以根据它的参数正则表达式来对字符串进行切割,并将返回的多个字符串放入到一个字符串数组中
运行结果为:
张三
男
23
代码示例2:
String str = "张三=aaBBBdfefe男=SASDfdfedfefdfd23";
String[] strings = str.split("[=a-zA-Z]+");
System.out.println(strings[0]);
System.out.println(strings[1]);
System.out.println(strings[2]);
这段代码和代码示例2类似,只是正则表达式更复杂一些
运行结果为:
张三
男
23
和代码示例1运行结果一致
常见对象(把给定字符串中的数字排序)
案例演示: 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
分析:
-
定义目标字符串"91 27 46 38 50"
-
对这个字符串进行切割,得到的就是一个字符串数组
-
把b中的字符串数组转换成int类型的数组
定义一个
int
类型的数组,数组的长度就是字符串数组长度
遍历字符串数组,获取每一个元素.将其转换成int
类型的数据
把int类型的数据添加到int
类型的数组的指定位置 -
排序
-
创建一个
StringBuilder
对象,用来记录拼接的结果 -
遍历int类型的数组, 将其每一个元素添加到
StringBuilder
对象中 -
就是把
StringBuilder
转换成String
-
输出
代码如下:
package org.westos.demo3;
import java.util.Arrays;
/**
* @Author: Administrator
* @CreateTime: 2019-05-01 15:35
*/
public class MyTest2 {
public static void main(String[] args) {
String str="91 27 46 38 50";//"27 38 46 50 91";
String[] s = str.split(" ");
//定义一个int数组
int[] arr=new int[s.length];
//遍历字符串数组,取出每一个元素,放到int数组里面
for (int i = 0; i < s.length; i++) {
arr[i]=Integer.parseInt(s[i]);
}
//排序
Arrays.sort(arr);
//遍历int数组拼串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]).append(" ");
}
String string = sb.toString().trim(); //可以去掉字符串两边的空格
System.out.println(string);
}
}
将字面值是int
型的字符串转为int
型的方法在我的之前的Integer
类的那篇博客中有讲解,大家可以查阅
常见对象(正则表达式的替换功能)
正则表达式的替换功能
String类的功能:public String replaceAll(String regex,String replacement)
代码示例:
package org.westos.demo4;
/**
* @Author: Administrator
* @CreateTime: 2019-05-01 16:26
*/
public class MyTest {
public static void main(String[] args) {
System.out.println("奥巴马是美国总统".replace("奥巴马", "*"));
String str="a12133b2323233222cewrere1243434aadfd888";
System.out.println(str.replaceAll("[0-9]+", ""));
}
}
通过调用替换方法来实现字符串中个别元素的替换
运行结果为:
*是美国总统
abcewrereaadfd
常见对象(Pattern和Matcher的概述)
正则的获取功能需要使用的类
A:Pattern和Matcher的概述
B:模式和匹配器的典型调用顺序
通过JDK提供的API,查看Pattern类的说明
典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
常见对象(正则表达式的获取功能)
A:正则表达式的获取功能
Pattern和Matcher的结合使用
B:案例演示 使用的是 find()方法 和 group()方法 注意一定要先使用find()方法先找到 才能用group()方法获取出来
需求:获取下面这个字符串中由三个字符组成的单词 正则表达式 \b[a-z]{3}\b
da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
最后
以上就是香蕉向日葵为你收集整理的Java中的正则表达式常见对象(正则表达式的概述和简单使用)的全部内容,希望文章能够帮你解决Java中的正则表达式常见对象(正则表达式的概述和简单使用)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复