黑马程序员 正则表达式1 匹配和切割

---------------------- <a target="blank">ASP.Net+Android+IO开发S</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

/*
 * 正则表达式的特点;符合一定规则的表达式
 *     专门作用于字符串.
 * 当我们在做字符串检验的时候一般情况下回先想到的是使用
 * String 类当中给我们提供的方法进行组合,但是代码太多,阅读性太差
 * 
 * 
 * 在Java中有一种方法专门是用于检验,字符串是不是数字的
 * Integer.parseInt("123a");
 * 如果字符串不都是数字的话就会出现,数字格式异常.
 * 用这种方式时可以的但是不容易想到,一般情况下是不会使用的.
 * 
 * 这个时候就有出现了,一种方式是专门用于检验
 * 字符串的,那就是正则表达式,这是专门用于字符串的
 * 方法,就是定义一种,方式让字符串按照这个方式来实现
 * 正则表达式的出现,大大简化了代码的书写,实现的功能
 * boolean boo = str.matches(这里面装的是正则表达式);
 * boolean boo= str.matches(regex);
 	就是用字符串定义出来的一个字符串的表达式只要是按照这种做法
 	来完成就好了
 	如;String len ="[1-9][0-9]{4,14}";
 	这就是在定义一个,数字字符串,第一位置上是1-9,第二个位置上是
 	0-9,这个位置上的数字的长度是,4-14位
 
 具体实现功能;
 1,字符串的匹配用的方法是 String matches();
 	matches();方法匹配的是整个字符串,只要有一处是
 	不满足的话就返回false;
 	
      正则特点;表达式是用一些特殊符号,来表示一些代码操作
      这样的话就简化了书写.
      所以我们学习正则表达式,就是在学习一些特殊符号的使用.
      
      在正则表达式当中如果反斜杠出现就是一对一对出现的,因为
      正则表达式是字符串,在字符串中 \ 是代表的是转义字符,所以
      他会把正则表达式中的在\后面相结合的字符给转义了,所以
      要在前面加上一个反斜杠,这样就不会导致,错误出现.

 [abc] a、b 或 c(简单类) 可以用来判断一个字符串中的,某一个
 字符位上出现的字符,要么是a 或者是b 或者是 c 如果是[abc]这样写的
 话就只能,是校验的是一个字符.
------------------------------------------------------------
[^abc] 任何字符,除了 a、b 或 c(否定) 正好和上面是相反的
除了abc 其他的都是可以的.这个也是的

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) 
如果是字母都可以的话,就是用这个,不分大小写的

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 
[a-z&&[def]] d、e 或 f(交集) 
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) 
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) 
------------------------------------------------------------
. 任何字符(与行结束符可能匹配也可能不匹配) 
\d 数字:[0-9] 
\D 非数字: [^0-9] 
\s 空白字符:[ \t\n\x0B\f\r] 
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
\W 非单词字符:[^\w] 
-------------------------------------------------------
X? X,一次或一次也没有 
X* X,零次或多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超过 m 次 


 代码如下 
public class Demo{
	public static void main(String[] args){
		//String str= "5696324";
		//show(str);
		//run();
		//demo();
		String tel="18616483";
		regex(tel);
	}
	//匹配电话号码 13xxx 15xxx  18xxx
	public static void regex(String tel){
		String len = "1[358]\\d{9}";
		boolean flag = tel.matches(len);
		if(flag)
			System.out.println(tel+"...这个是电话号码");
		else
			System.out.println(tel+"....这个不是电话号码");
	}
	public static void demo(){
		String str= "a";
		String regex= "[bcd]";
		//这定义的规则是,这个字符串的第一个字符,只能是
		//bcd 中的一个,而且只能有一个字符.
		boolean boo = str.matches(regex);
		System.out.println(boo);
	}
	public static void run(){
		String name="569611324";
		String len ="[1-9]\\d{4,14}";
		boolean boo = name.matches(len);
		if(boo)
			System.out.println(name+"......这个是可以的");
		else
			System.out.println("......出现了不可以出现的字符");
	}
	public static void show(String str){
		int len = str.length();
		if(len>=5 && len<=15){
			if(!(str.startsWith("0"))){
				try{
					long l = Long.parseLong(str);
					System.out.println(l);
				}
				catch(Exception e){
					System.out.println("出现非法字符了");
				}
			}
				char[] arr=str.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(str);
				}
				else{
					System.out.println("出现非法字符了");
				}

				}
				else{
					System.out.println("是0开头了");
				}
		}
		else{
			System.out.println("长度太长了");
		}
	}
}*/
/*字符串第二大功能
 * 切割;用到的方法是 String 类中的split()方法.
 * 
 * 在切割中非常重要的概念;为了能让规则的结果被重用,组.
 * 组的出现都有编号.从1开始.想要使用已有的组可以通过
 * \n 的形式来获取 n 代表的就是组的编号.
 * 
 * 
 * 在要被操作的字符串中,要使用叠词的方式来完成对,字符串
 * 的操作的时候,这个时候就需要用到组的概念
 * 这里面提到的什么叫做叠词呢/
 * 就是连续出现两次的字符.
 * 假如;String s= "dahakkhammhah";
 * 上面出现的kk 和 mm 就叫做叠词
 * 现在我就是想用叠词的方式把字符串进行切割.
 * (.)\1 这句话的意思是,叠词出现的可能是任意字符
 * 用小括号把它括起来,表示将这个任意字符分成组
 * 每组都有自己的编号,这是第一组,后面\1表示把前面
 * 第一组中的结果拿过来使用,这样(.)\1 就表示一个叠词了
 * */
public class Demo{
	public static void main(String[] args){
		splitDemo();
	}
	public static void splitDemo(){
		//String str= "zhangsan  wangwu   zhaoliu" ;
	//	String st= " +";//这是按照多个空格来切割的
	String str= "zhangsan.lisi.wangwu";
	str="c:\\abc\\a.text" ;
	str="asgjsdqqghjhssdsgjui";
			
	//String st= ".";//如果是按照着样点来切割的话,那么什么都不会
					//切割到的,点 代表的是任意字符,所以不能用
	                //如果真的想用 点来切割的话那么需要这样做
	
	//String st ="\\.";//而在字符串中,\ 代表的是转义字符要成对出现
	
	String st= "\\\\";//这样的方式,就是在用\\来切割的.
	st= "(.)\\1";
	String[] arr=str.split(st);
		for(String s: arr){
			System.out.println(s);
		}
		
	}
}



























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值