正则表达式:符合一定规则的表达式

作用:用于专门操作字符串

特点:用于一些特定的符号来表示一些代码操作,这样就简化书写,主要是学习一些特殊符号的使用

好处:可以简化对字符串的复杂操作。

弊端:符号定义越多,正则越长,阅读性越差

具体操作:

1.匹配:String matches方法

用规则匹配所有的字符串,只要有一个不符合,则匹配结束。

2.切割:String sqlit();

3.替换:replaceAll();

4.获取:将字符串中的符合规则的子串取出。

操作步骤:

首先,将正则表大式封装成对象。

然后,将正则对象和要操作的字符吕相关联。

接下来,关联后,获取正则匹配的引擎

最后,通过引擎对符合规则的子串进行操作。

public class RegexDemo {

	public static void main(String[] args){
		//checkQQ_1();
		//checkqq();
		//Demo();
		//checkTel();
		//splitDemo();//切割
		String str="oadi3298324892adkal309290kdoda300000";//将字符串中的数组替换成#
		replaceAllDemo(str,"\\d{7,}","#");
		String str1="aadkkkaooelliwoonbvxkksoll";//将叠词替换成&
		replaceAllDemo(str1,"(.)\\1+","&");
		String str2="aadkkkaooelliwoonbvxkksoll";//将叠词的字符串替的确成单个字母
		replaceAllDemo(str1,"(.)\\1+","$1");//想要获取组的符号$,$1就是拿前面的这个规则中的组
	}
	/*
	要求对QQ号码进行校验
	这种方式,使用了String类中的方法,进行组合完成了需求,但是代码过于复杂
	*/
	public static void checkQQ_1(){
		String qq="a12345455";
		int len=qq.length();
		if(len>=5&&len<=15){
			if(!qq.startsWith("0")){
//				char[] arr=qq.toCharArray();//把字符串转换成数组类型
//				boolean flag=true;
//				for(int x=0;x<arr.length;x++){
//					if(!(arr[x]>='0'&&arr[x]<='9')){
//					flag=false;
//					break;
//					}
//				}
//				if(flag){
//					System.out.println("qq:"+qq);
//				}
//				else{
//					System.out.println("出现非法字符");
//				}
				try {
					long l=Long.parseLong(qq);
					System.out.println("qq:"+l);
				} catch (Exception e) {
					System.out.println("出现非法字符");
				}

			}
			else{
				System.out.println("不可以以0开头");
			}
		}
	}

	public static void checkqq(){
		String qq="1882345";
		String regex="[1-9]\\d{4,14}";//这是正则表达式的规则
		Boolean flag=qq.matches(regex);
		if(flag){
			System.out.println(qq+"...is ok");
		}else{
			System.out.println(qq+"...is  not ok");
		}
	}

	public static void Demo(){
		String str="c";
		String reg="[bcd][a-zA-Z]\\d";//\\d表示数字:[0-9]
		//表示打头是字母,后面全是数字,用这个规则匹配所有的字符,一旦有一个不是,就会报错,
		//如果是\d*,表示数字出现的次数是零次或多次
		boolean b=str.matches(reg);
		System.out.println(b);

	}

	/*
	 * 匹配手机号段 13xxxx,15xxx ,18xx
	 */
	public static void checkTel(){
		String tel="13900008792";
		String telReg="1[358]\\d{9}";
		System.out.println(tel.matches(telReg));
	}

	public static void splitDemo(){
		String str="zhangsan   lisi   wangxu";
		String reg=" +";//按逗号,空格切,切割的原理找到有,然后就去切
		//上面的加号就是只切一次空格,完了之后把后面的连接起来。还要注要.是一个特殊符号
		//不能用.去切,我们可以用转义。应该是这样String reg="\\."
		//如果要支切\\,如(c:\\abc\\a.txt),我们可以这样定义String reg="\\\\"
		//按照叠词完成切割sqltDemo("ddkdakfdssieowor","(.)\\1)");其中的.表示任意字符,\1表示匹配前一个字符
		//如果是ddd ssss ttttt这种的话,就在后面弄个"+",就是"(.)\\1+)" ,那个"+"是一个或多个的意思

		String [] arr=str.split(reg);
		for(String s:arr){
			System.out.println(s);
		}
	}

	public static void replaceAllDemo(String str,String reg,String newStr){

		str=str.replaceAll(reg, newStr);

		System.out.println(str);
	}

}
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo2 {

	public static void main(String [] args){

		getDemo();
	}
	public static void getDemo(){
		String str="ming tian jiu yao fang jia le,da jia";
		//str="123456";
		String reg="\\b[a-z]{3}\\b";//边界值的限定
		//将对象封装成对象。
		Pattern  p=Pattern.compile(reg);
		//让正则对象和要作用的字符串相关联,获取匹配器对象。把多个方式都封装到了匹配器当中。
		//引擎或匹配器
		Matcher m=p.matcher(str);
		//System.out.println(m.matches());//其实String类中的matches方法,用的就是Pattern和Matcher对象来完成的。
		//只不过被String的方法封装后,用起来较为简单,便功能比较单一,想利用到复杂对象时,就要重新回去找到matches对象
		//boolean b=m.find();//将规则作用到字符串上,并进行符合规则的子串查找。
		//System.out.println(b);

		//System.out.println(m.matches());//这是一个细节问题,加上这句话后,为什么得不到我们预期的结果,原因,m.matcher()作用的是整个字符串,
		//所以判断是false,但是刚开始读到ming却是true,这个时候下面的find,就开始从tian开始进行匹配了。
		while(m.find()){
			System.out.println(m.group());
			System.out.println(m.start()+"...."+m.end());//找到每个字符的角标
		}

		//group方法用于获取匹配后的结果

	}

}

Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法的更多相关文章

  1. 黑马程序员:Java基础总结----正则表达式

    黑马程序员:Java基础总结 正则表达式   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import  java.util.regex.*; 符合一定规 ...

  2. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  3. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  4. JAVA基础(二)—— 常用的类与方法

    JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...

  5. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  6. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  7. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  8. java基础解析系列(十一)---equals、==和hashcode方法

    java基础解析系列(十一)---equals.==和hashcode方法 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系 ...

  9. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  10. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

随机推荐

  1. 2015 多校联赛 ——HDU5353(构造)

    Each soda has some candies in their hand. And they want to make the number of candies the same by do ...

  2. Windows下免安装版mysql5.7的初始密码

    MySQL5.7之后,初始密码不在默认为空,而是随机生成的密码. 在mysql/data目录下,生成了一个.err文件(等同linux下的log日志文件,此文件会被mysql服务占用). 使用记事本可 ...

  3. 关于惠普hp服务器开机时F10菜单变成F10 Function Disabled的解决方法

    今天笔者由于在Intelligent Provisioning智能配置里不小心将"启动Intelligent Provisioning"选项钩选成禁用了,如下 结果就造成,在之后服 ...

  4. Java Native方法

    一. 什么是Native Method   简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非j ...

  5. Spring常用接口和类

    一.ApplicationContextAware接口 当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口.代码展示如下: p ...

  6. 自定义alert窗口样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. return、break和continue

    return.break和continue 这三个关键字有一个共同点,那就是读能让后面的语句不执行,不同的地方就是挑的距离不一样. return很强大,如果一个函数中有一个return,并且执行了,那 ...

  8. Linux下SonarQube代码质量平台的安装和使用方法

    Sonar简介: Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,Java ...

  9. 工作流程,编程,调试,性能:Unity游戏开发者应该学习的20个改进技巧

    Unity 是一个备受欢迎的游戏开发平台.它的功能令人印象深刻,同时也迎合了不同的游戏开发需求.游戏开发者可以使用 Unity 创建任何类型的游戏,从世界级的 RPG 游戏到最流行的增强现实游戏 Po ...

  10. NDK编程的一个坑—Arm平台下的类型转换

    最近在做DNN定点化相关的工作,DNN定点化就是把float表示的模型压缩成char表示,虽然会损失精度,但是由于DNN训练的模型值比较接近且范围较小,实际上带来的性能损失非常小.DNN定点化的好处是 ...