正则表达式,匹配,切割,替换
/**
* 正则表达式:符合一定规则的表达式
* 作用:用户专门操作字符串.
* 特点:用一些特定的符号来表示一些代码操作.这样就简化了代码书写.
* 学习正则表达式,就是在学习一些特殊符号的使用
* 好处:可以简化对字符串的复杂操作
* 弊端: 符号定义越多,正则越长,阅读新越差.
*
* 具体操作功能
* 1.匹配的工作 String matches()方法;
* 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
*
* 2.切割: String split()
*
* 3.替换: replace() replaceAll()
*
*
*
*/
public class RegexDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//checkqq();
//demo();
//System.out.println((char)11); //男性的生物表示图标
//splitDemo1("张三.李四...王武...招六.sunba.xiaqi","\\.+");
//splitDemo1("c:\\abc\\a.txt","\\\\");
String str="1356420773000|2012121245|2589712|20.00|0.60";
splitDemo1(str,"\\|");
System.out.println("叠词分割");
//按照叠词切割 \n:表示 捕获组, (*) 表示作为不获组
//为了让规则的结果被重用,可以将规则封装成一个组,用()完成,组的出现都有编号
//从1开始,想要使用组可以通过\n(n就是组的编号)的形式来获取
//判断组有多少个,就看多有多少个左括号, 编码呢,也是 从左变开始 1,然后 2,然后 ....
//举例 ((())()) : 有4组 , (1(2(3))(4)):
str="qiokknooloqqqnsdfhhdzzzzjf";
splitDemo1(str,"(.)\\1+"); // kk qq oo hh zz
System.out.println("---------替换----------");
str="wer23413132231st1551564sdfsd56f1565641416121sdf";
replaceAllDemo(str,"\\d{5,}","#"); //连续 5个以上的数字 替换成 #
//替换叠词
str="qiokknooloqqqnsdfhhdzzzzjf";
replaceAllDemo(str,"(.)\\1+","&"); //将叠词 替换 与 符号
//将叠词 替换成 "$"
replaceAllDemo(str,"(.)\\1+","\\$"); //将叠词 替换 与 符号
//将叠词 替换成 单个字符 zzzz--->z qq-->q
replaceAllDemo(str,"(.)\\1+","$1"); //使用 "$" 和编号,获取 前面匹配中的组
}
public static void replaceAllDemo(String ostr,String regex,String nstr){
ostr=ostr.replaceAll(regex, nstr);
System.out.println(ostr);
}
//简单的
public static void splitDemo1(String str,String regex){
/* String str="张三.李四...王武...招六.sunba.xiaqi";
str="c:\\abc\\"
String reg="\\.+"; *///按照多个 点进行切割 "." 是正则中的特殊字符,需要转义 \. ;但是 \ 也需要转移
String[] arr=str.split(regex);
for (String s : arr) {
System.out.println(s);
}
}
//简单的
public static void splitDemo(){
String str="张三,李四,王武,招六,sunba,xiaqi";
String reg=",";
String[] arr=str.split(reg);
for (String s : arr) {
System.out.println(s);
}
}
/**
* 校验手机号
* 手机号段只有 13xxx 15xxx 18xxx
*/
public static void checkMobile(){
String tel="";
String telReg="1[358]\\d9";
System.out.println(tel.matches(telReg));
}
/**
* java 中正则表达式中 "\" 要成对出现
*/
public static void demo(){
String str="b9";
String reg="[a-zA-Z]\\d?";
boolean b=str.matches(reg);
System.out.println(b);
}
/**
* 使用正则表达式
*/
public static void checkqq(){
String qq="1323123312";
String regex="[1-9][0-9]{4,14}";
boolean flag=qq.matches(regex);
if(flag)
System.out.println(qq+".... is ok");
else
System.out.println(qq+".... no no no");
}
/**
* 对QQ号码进行校验
* 要求 :5~15 0 不能开头,只能是数字
*
* 这种方式,使用String类中的方法,进行组合完成了需求,但是代码过于复杂
*/
public static void checkQQ(){
String qq="1234234121612312";
int len=qq.length();
if(len>=5 && len<=15){
if(!qq.startsWith("0")){
/*char[] arr=qq.toCharArray();
boolean flag=true;
for (char c : arr) {
if((c>='0' && c<='9')){
flag=false;
break;
}
}
if(flag){
System.out.println("QQ:"+qq);
}else{
System.out.println("QQ出现非法字符");
}*/
try{
long l=Long.parseLong(qq);
System.out.println("QQ:"+qq);
}catch(NumberFormatException e){
System.out.println("QQ出现非法字符");
}
}else{
System.out.println("不可以是0开头");
}
}else{
System.out.println("QQ长度错误");
}
}
}
正则 获取
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正则表达式的第四个功能.
* 4.获取: 将字符穿中 符合规则的 子串 取出
*
* 操作步骤:
* 1. 将正则表达式 封装成对象
* 2. 让正则对象和要操作的字符串关联
* 3. 关联 后获取正则匹配引擎
* 4. 通过 引擎 对符合规则的子串 进行操作 比如 取出
*
*
*
*/
public class RegexDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
getDemo();
}
public static void getDemo(){
String str="123456";
str="ming tian jiu yao fang jia la.";
String regex="[1-9]\\d{4,14}";
regex="\\b[a-z]{3}\\b";
//1.将 规则 封装 成对象
Pattern p=Pattern.compile(regex);
//2.让正则对象 和 字符串 关联
Matcher m=p.matcher(str); //获取匹配其 引擎
//其实 String类中的matches方法,用的就是Pattern和 Matcher 对象来完成
//只不过,被String的方法封装后,用起来简单,但是 功能单一.
//想要使用 更多复杂的对象的时候 ,就要找 Pattern 和 Matcher 对象
//System.out.println(m.matches());
//还有很多 String 没有封装的方法
/* boolean flag=m.find();//将规则作用到字符串上,并进行符合跪着的子串查找
System.out.println(flag);
System.out.println(m.group()); //用户获取匹配后的结果,但是得先找下
*/
System.out.println("matchers:"+m.matches());//作用于整个字符串,返回 false 发现会影响 后面 group的查找, 改变了 查找的索引
while(m.find()){
System.out.println(m.group());
System.out.println(m.start()+"..."+m.end());//包含头 ,不包含 尾
}
}
}
分享到:
相关推荐
### 一、正则表达式验证IP地址 #### 1. 正则表达式规则: 在Java中验证IP地址时,我们通常使用如下的正则表达式: ```java Pattern pattern = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\...
#### 一、Java中的数字验证正则表达式 在Java中,可以通过`java.util.regex`包提供的工具来进行正则表达式的匹配操作。下面是一个示例方法,用于判断一个字符串是否只包含数字: ```java public boolean isNumber...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据提取、验证输入等场景。在编程语言中,正则表达式是一种强大的工具,能够帮助我们快速有效地处理字符串,提取...
在编程语言如Java中,正则表达式的应用非常广泛,比如在表单验证、数据清洗、文本解析等方面都有重要的作用。 #### 二、常用正则表达式实例分析 ##### 1. 文本框输入内容控制 - **表达式**: `^[0-9]+\.{0,1}[0-9]{...
毕向东的Java教程深入浅出地讲解了这一关键概念,特别是在第25天的课程中,他专注于正则表达式的特性。在这个教程中,毕向东可能会涵盖以下几个核心知识点: 1. **正则表达式基础**:首先,他会介绍正则表达式的...
亲测可用,总共右5天,覆盖Java基本内容。从基本语法到网络编程和正则表达式。
5. **字符串增强**:添加了新的字符串方法,如`join()`, `split()`的正则表达式优化,以及`isBlank()`等。 6. **类型推断**:在局部变量声明和匿名类中,编译器能够自动推断出类型,简化了代码。 7. **NIO.2**:...
【Java_day25上课资料.zip】是一个包含Java学习资源的压缩包,可能涵盖了第25天的课程内容。从标题可以推断,这是一份针对Java编程的学习材料,适合已经有一定基础的学习者或者正在系统学习Java的人。由于没有提供...
- 可以使用正则表达式匹配数字,并使用replaceAll()方法替换字符。 44. **数组操作**: - 给定一个整数数组,找出其中的最大值和最小值。 - 可以使用循环结构遍历数组,并记录下最大值和最小值。 45. **素数...
实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的...
实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146...
实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...
- 字符串替换可以通过 `replace` 方法或正则表达式实现。 3. **数据类型之间的转换** - 将数值型字符转换为数字:可以使用 `Integer.parseInt()` 或 `Double.parseDouble()`。 - 将数字转换为字符:可以使用 `...
实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 ...
实例105 使用正则表达式验证电话号码的格式 141 6.2 字符串缓存类StringBuffer 143 实例106 创建字符串缓存类 143 实例107 提取单个字符 144 实例108 给指定字符赋值 145 实例109 插入新的字符 146 实例110 插入新的...
这个活动通常在每年的12月份进行,每天发布两个新的编程问题,持续25天,旨在为程序员提供有趣的逻辑和算法难题,以提升他们的编程技巧和解决问题的能力。参与者可以使用任何编程语言来解决这些问题。 在这个名为 ...
修改BUG:超级列表框在属性“整行选择”为真时,鼠标单击第一列右面也会导致第一列中的选择框被选中或取消选中。 21. 修改BUG:Sqlite3数据库支持库中“Sqlite数据库.取错误文本()”返回的文本是UTF-8编码(应是GB...
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......