您的位置:首页 > 职场人生

黑马程序员——正则表达式

2014-05-12 16:19 375 查看

---------------------- 黑马程序员
Android培训、期待与您交流! ----------------------



正则表达式

特点匹配

/*
* 正则表达式:符合一定规则的表达式。
*
* 作用:用于专门操作字符串.
* -----------------------------------------
* 好处:可以简化对字符串的复杂操作。
* 弊端:符号定义越多,阅读性越差
* -----------------------------------------
* 特点:用于一些特定的符号来表示一些代码操作。这样简化代码书写.
* 所以学习正则表达式,就是在学习一些特殊符号的使用。
*
* 具体操作功能:
* 1,匹配:String matches()方法
* 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false;
*
* 2,切割:String split()方法
*
* 注意:在正则表达式中'\'要成对出现\\,避免转义
*/
public
class
_01_特点 {

public
static void
main(String[]args)
{
checkQQ2();//QQ号
FuHao();//符号
checkTel();//手机号
}

//特殊符号使用
public
static void
FuHao()
{
String str = "b";

//[a-zA-Z]代表第一位所有a-z大小写字母 \\d?代表第二位:有一次或一次也没有(数字)
String reg = "[a-zA-Z]\\d?";

boolean b = str.matches(reg);//匹配
System.out.println(b);
}

//检测QQ的方法
public
static void
checkQQ2()
{
String qq = "12222222222222";

//正则表达式:1. 1至9之间的数字
2.0至9之间的数,每个数字出现的次数4-14次
String regex = "[1-9]\\d{4,14}";

boolean flag = qq.matches(regex);
if(flag)
System.out.println(qq+"登录成功");
else
System.out.println(qq+"登录失败");
}
/*
* 需求:对QQ号码进行校验
* 要求:5-15位,0不能开头,只能是数字
*
* 这种方式,使用String类中的方法,进行组合完成了需求。但是代码过于复杂。
*/

public
static void
checkQQ_1()
{
String qq = "43243243243244324";

int len = qq.length();
if(len>=5 && len<=15)
{
if(!qq.startsWith("0"))//Integer.parseInt(a223);
{
try
{
//由于位数过长,所以选择long
long l = Long.parseLong(qq);
System.out.println(l);
}
catch(NumberFormatException e)
{
System.out.println("出现非法字符");
}

/*第一种
boolean flag = true;
char[]arr = qq.toCharArray();
for(int x=0; x<arr.length; x++)
{
if(!(arr[x]>='0' &&arr[x]<='9'))
{
flag = false;
break;
}
}
if(flag)
{
System.out.println(qq+"登录成功");
}
else
{
System.out.println("出现非法字符");
}
*/
}
else
{
System.out.println("不能以0开头");
}
}
else
{
System.out.println("长度过长");
}
}

//检测手机号
//手机号段:13xxx 15xxx 18xxx
public
static void
checkTel()
{
String tel = "134343243243";
String telReg = "1[358]\\d{9}";

boolean b = tel.matches(telReg);
System.out.println(b);
}
}

切割

//切割:String split()方法

public
class
_03_切割 {

public
static void
main(String[]args)
{
//spileDemo("zhangSan,liSi,wangWu",",");
//spileDemo("zhangSan.liSi.wangWu","\\.");//通过"."来切割方式

//spileDemo("c:\\abc\\a.txt","\\\\");//通过“\\”来切割

//spileDemo("zhangSan liSi wangWu"," +");//通过" "空格来切割方式

/*
* 按照叠词完成切割,为了让规则的结果被重用,可以将规则封装成一个组。
* 用()完成,组的出现都有编号。
* 从1开始。想要使用已有的组,可以通过 \n(n就是组的编号)的形式来获取.
*
* "."表示第1个位置可以是任意字符 --> "(.)"对其进行封装组-->"\\1"返向获取与第1个出现的字符是否相同-->"+"表示出现多次eee,如"abccd'eee'"
*/
spileDemo("abcdeedfdafffdafgdg","(.)\\1+");//通过"叠词"来切割
}

//切割
public
static void
spileDemo(String
str,String reg)
{
String[] name = str.split(reg);
for(String names : name)
{
System.out.println(names);
}
}
}

替换replaceAll

/*
* 替换:String replace();
* String replaceAll();
*/
public
class
_04_替换Replace {

public
static void
main(String[]args)
{
//将字符串中的数字,替换成#号;(只要数字连续超过5个,就替换成#号)
replaceAllDemo("fdafwewfsa342q0098r01389998u","\\d{5,}","#");

//将叠词替换成#号
replaceAllDemo("fdafdsadssfdafdss3fdfdssf33d","(.)\\1+","#");

//将叠词替换成单个词zzzzz-->z $1 -->拿前面(.)
的第一个组
replaceAllDemo("fdafwewfsa342q0098rrrrrr01389998u","(.)\\1+","$1");
}

//替换方法
public
static void

replaceAllDemo(Stringstr, String reg, String newstr)
{
str = str.replaceAll(reg,newstr);
System.out.println(str);
}
}

获取Matcher

/*
* 正则表达式的第四个功能
* 4,获取:将字符串中符合规则的子吕取出。
*
* //将规则封装成对象。
* Patternp = Pattern.compile(reg);
*
* 操作步骤:
* 1,将正则表达式封装成对象。
* 2,让正则对象和要操作的字符串相关联.
* 3,关联后,获取正则匹配引擎。
* 4,通过引擎,对符合规则的子串进行操作,比如取出。
*/

import java.util.regex.*;

public
class
_05_获取 {

public
static void
main(String[]args)
{
//getDemo();
getDemo2();
}

//获取方法QQ
public
static void
getDemo()
{
String str = "ming tianjiu yao fang jia le, da jia";

str = "12343243";
String reg = "[1-9]\\d{4,14}";

//将规则封装成对象。
Pattern p = Pattern.compile(reg);

//让正则对象和要作用的字符串相关联->匹配 获取新的匹配器对象.
Matcher m = p.matcher(str);

//其实String类中的matches方法。用的就是Pattern和Matcher对象来完成的。
//只不过被String的方法封装后,用起来较为简单。但功能却单一。
System.out.println(m.matches());
}

public
static void
getDemo2()
{
//1.定义字符串
String str = "ming tianjiu yao fang jia le, da jia";

//2.定义查找规则 "\\b"->单词左边空格 [a-z]{4}-->连续出现3个单词
String reg = "\\b[a-z]{4}\\b";

//3.将规则封装成对象。并调用compile方法相关联
Pattern p = Pattern.compile(reg);

//4. 让正则对象和要作用的字符串相关联->匹配 获取新的匹配器对象.
Matcher m = p.matcher(str);

//将规则作用到字符串上,并进行符合规则的子串查找
boolean b = m.find();
System.out.println(b);
System.out.println("查找到的匹配结果:"+m.group());//用于获取匹配后结果。

//5.注意:取出方式用这个
while(m.find())
{
System.out.println("匹配结果为:"+m.group());
System.out.println(m.start()+".."+m.end());
}
}
}

练习1(口吃)

/*
* 需求:
* 将我我。。。要要。。。学。。。编编。。程程
*
* 用哪种功能?〉
*
* 思考方式:
* 1,如果只想知道该字符串是对是错,可以使用 匹配
* 2,想要将已有的字符串,变成另一个字符串,可以使用 替换
* 3,想要按照指定的方式,将字符串变成多个字符串,使用切割 获取规则以外的子串
* 4,想要获取符合需求的字符串子串, 获取
获取符合规则的子串
*/
public
class
_06_练习1 {

public
static void
main(String[]args)
{
String str = "我我。。。要要。。。学。习习习。。编。。。编。。程程";
/*
* 将已有字符串,变成另一字符串,使用替换
* 思路1:
* 1,可以先将。去掉。
* 2,再将多个重复内容变成单个内容
*/

// "\\"查找功能
str = str.replaceAll("\\。+","");//将点替换成空
str = str.replaceAll("(.)\\1+","$1");//将重复的替换成单个
System.out.println(str);
}

}

---------------------- 黑马程序员
Android培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: