标签:
1 正则表达式
package My;
/*
* 正则表达式
*
* 正则表达式用于操作字符串数据
* 通过一些特定的符号来体现的
* 所以我们为了掌握正则表达式 必须要学习一些符号
*
*虽然简化了 但是阅读性差
*/
public class ZhengZe {
public static void main(String[] args) {
String qq="012222333322211";
checkQQ(qq);
String regex="[1-9][0-9]{4,14}"; //正则表达式
boolean b=qq.matches(regex);
System.out.println(b);
}
/*
* 需求:定义一个功能对qq号进行校验
* 要求:长度5-15 只能是数字 不能以0开头
*
*/
public static void checkQQ(String qq)
{
int len=qq.length();
if(len>=5&&len<=15)
{
if(!qq.startsWith("0"))
{
try
{
long l=Long.parseLong(qq);
System.out.println("qq格式正确");
}
catch(NumberFormatException e)
{
System.out.println("含有非法字符");
}
}
else
{
System.out.println(qq+"不能0开头");
}
}
else
{
System.out.println(qq+":长度错误");
}
}
}
2 常见的功能
package My;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex2 {
public static void main(String[] args) {
/*
* 正则表达式对字符串的常见操作
* 1 匹配
* 其实使用的是str类中的matches方法
*
* 2 切割
*
* 3替换
*
* 4 获取
*/
// functionDemo1();
//functionDemo2();
//functionDemo3();
functionDemo4();
}
/*
* 演示获取
*将正则规则进行对象的封装
* Pattern p=Pattern.compile("a*b)";
* 通过正则对象的match方法与字符串关联,获取要对字符串操作的匹配器对象Matcher
* Matcher m=p.matcher("aaaaab");
* 通过Matcher匹配器对象的方法对字符串进行操作
* boolean b=m.mathes()
*
*/
private static void functionDemo4() {
String str="da jia hao,ming tian bu fang jia";
String regex="\\b[a-z]{3}\\b";
//1 将正则封装成对象
Pattern p=Pattern.compile(regex);
//2 通过正则对象获取匹配器对象
Matcher m=p.matcher(str); //与字符串关联
//使用Matcher对象的方法对字符串进行操作
//既然要获取三个字母组成的单词
//查找 find();
System.out.println(str);
while(m.find())
{
System.out.println(m.group());//获取匹配的子序列
System.out.println(m.start()+":"+m.end());
}
}
/*
* 替换演示
*/
private static void functionDemo3() {
/* String str="zhangsanooooolisittttzhaoliu";
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
*/
String tel="18305980070";
tel=tel.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
System.out.println(tel);
}
//切割
//要明白组的概念 按照左括号去数 组
private static void functionDemo2() {
String str="zhangsantttttxiaoqiangdddzhaoliu";
String []names=str.split("(.)(t)\\2+"); //.在正则表达式中是一个特殊符号 代表任意字符
for(String s:names)
{
System.out.println(s);
}
}
/*
* 演示 1匹配
*/
public static void functionDemo1()
{
//匹配手机号码是否正确
String tel="18305980070";
String regex="1[358]\\d{9}";
boolean b=tel.matches(regex);
System.out.println(tel+":"+b);
}
}
3 练习
package myNew1;
import java.util.TreeSet;
public class RegexPractice {
public static void main(String[] args) {
//practice1();
// practice2();
practice3();
}
private static void practice3() {
/*
* 练习3 对邮件地址进行校验
*/
String mail="sina@123.com.cn";
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z_]{0,3})+";
boolean b=mail.matches(regex);
System.out.println(mail+":"+b);
}
private static void practice2() {
/*
* 练习2 ip地址排序
* 172.168.3.2 1.0.3.0 3.3.3.3 196.7.0.5
*
* 该如何排序呢?
* 首先 尝试把全部都补成三位 可以全部先补两个0
*
*/
String str="172.168.3.2 1.0.3.0 3.3.3.3 196.7.0.5";
//全部都补两个0
str=str.replaceAll("(\\d+)", "00$1");
//变成三位一组的
str=str.replaceAll("0*(\\d{3})","$1");
//切割成子字符串
String []ips=str.split(" +");
//利用集合的特点进行排序
TreeSet<String> ts=new TreeSet();
for(String ip:ips)
{
ts.add(ip);
}
for(String t:ts)
{
System.out.println(t.replaceAll("0*(\\d)","$1"));
}
}
private static void practice1() {
/*
* 练习1 治口吃
*
* 我我我我我我我.......爱爱爱爱爱爱.......中中中中中中......国国
*
*
*
*/
String str="我我我我我我我.......爱爱爱爱爱爱.......中中中中中中......国国";
str=str.replaceAll("\\.+", "");
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
}
}
4爬虫
package myNew1;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NetSpider {
public static void main(String[] args) throws Exception {
List<String> list=getMails();
List<String> list1=getMailByWeb();
}
private static List<String> getMailByWeb() throws Exception {
URL url=new URL("http://www.baidu.com");
BufferedReader bufr=new BufferedReader(new InputStreamReader(url.openStream()));
//2 对读取的数据进行规则的匹配。从中获取符合规则的数据
String mail_regex="\\w+@\\w+(\\.\\w+)+";
List<String> list=new ArrayList<String>();
Pattern p=Pattern.compile(mail_regex);
String line=null;
while((line=bufr.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
//将符合规则的数据添加到集合中
list.add(m.group());
}
}
return list;
}
private static List<String> getMails() throws Exception {
//1 读取源文件
BufferedReader bufr=new BufferedReader(new FileReader("c:\\web.html"));
//2 对读取的数据进行规则的匹配。从中获取符合规则的数据
String mail_regex="\\w+@\\w+(\\.\\w+)+";
List<String> list=new ArrayList<String>();
Pattern p=Pattern.compile(mail_regex);
String line=null;
while((line=bufr.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
//将符合规则的数据添加到集合中
list.add(m.group());
}
}
return list;
}
}
标签:
原文地址:http://www.cnblogs.com/HJL085/p/5794144.html