---------------------- <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);
}
}
}