------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
2.切割:String split()
正则表达式是
符合一定规则的表达式
作用: 用于专门操作字符串
特点: 用一些特定符号表示一些代码操作,简化书写
弊端:符号定义过多,正则越长,阅读性越差
验证QQ号
public static void checkQQ()
{
String qq = "674143143";
int len = qq.length();
if(len>=5 && len<=15)
{
if(!qq.startsWith("0"))
{
try{
long l = Long.parseLong(qq);
}
catch(NumberFormatException e)
{
System.out.println("出现非法字符");
}
}
}
}
用正则表达式能简化验证过程
常用规则
[abc]中定义一个位置可能出现的字符
[^abc]除了abc
[a-zA-Z]所有字母,[a-d[m-p]]并集[a-z&&[sgf]]取交集[a-z&&[^c-i]]
预定义中的'\'要成对出现,因为需要转义
\d数字
\D非数字
\w数字字母下划线
\W非(数字字母下划线)
数量词
X?一次或一次也没有
X*零次或多次
X+一次或多次
X{n,m}至少n次,不超过m次
X{n},X{n,}
.表示任意字符,"\\."表示实际的'.';
可以将规则进行封装成组
(()(()()))多个组时,判断是第几个组,只需要数是第几个'(';
具体操作功能:
1.匹配:String matchs方法
public static void checkQQ()
{
String qq = "564643356";
String regex = "[1-9][0-9]{4,14}";
boolean flag = qq.matches(regex);
if(flag)
System.out.println(qq+"验证通过");
else
System.out.println(qq+"不合法");
}
}
2.切割:String split()
splitDemo("c:\\as\\dgd.log","\\\\");//'\'用来转义'
splitDemo("akhsffklhgjjdshaaagls","(.)\\1+");//用叠词切割,用到了组的概念
public static void splitDemo(String str,String reg)
{
String[] arr = str.split(reg);
for(String s : arr)
{
System.out.println(s);
}
}
3.替换:String replaceAll()
String str = "as554s65ssg454546sa";
str.replace("\\d{5,}","*");
str.replace("(.)\\1+","$1");//$1拿前一个规则中的第一个组
4.获取:将字符串中符合规则的字串取出
1.将正则表达式封装成对象2.让正则表达式对象和要操作的字符串相关联,获取匹配器对象3.关联后,取出正则匹配引擎4.通过引擎对符合规则的字串进行操作,比如取出
public static void getDemo()
{
String str = "ming tian hui chi rou ma ";
String reg = "\\b[a-z]{3}\\b";//'\b'单词边界
//规则封装成对象
Pattern p = Pattern.compile();
//对象与要操作的字符串关联,获取匹配器对象
Matcher m = p.matcher(str);
//只有find后才能取,一次取一个子串
while(m.find())
{
System.out.println(m.group());
}
正则表达式中"\"要成对出现
m.find()将规则作用到字符串上,并进行符合规则的子串查找
group()方法用于获取匹配后的结果,只有find后才能取
end(),start();获得子串的索引位置
匹配是拿规则依次在原字符串进行查找
matches();是否符合规则,返回真假,会移动匹配器的指针
网页爬虫(蜘蛛)
class netSpider{
public static void main(String[] args) throws IOException{
URL url = new URL("http://baike.baidu.com/view/118321.htm" );//获取URL对象
URLConnection conn = url.openConnection();//打开连接
Pattern p = Pattern. compile("\\w+@\\w+(\\.\\w+)+");
BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
BufferedWriter bufw = new BufferedWriter(new FileWriter("cd.txt"));
String line = null;
while((line=bufr.readLine())!=null){
Matcher m = p.matcher(line);
while(m.find()){
System. out.println(m.group());
bufw.write(m.group());
bufw.newLine();
}
}
bufr.close();
bufw.close();
}
}