String |
replaceAll(Stringregex, Stringreplacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
String |
replaceFirst(Stringregex, Stringreplacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
String[] |
split(Stringregex) 根据给定正则表达式的匹配拆分此字符串。 |
String[] |
split(Stringregex,intlimit) 根据匹配给定的正则表达式来拆分此字符串。 |
@H_404_395@
String类对正则表达式的支持比较完善,在以后开发中,使用正则表达式,一般直接使用String类即可
正则表达式的应用:
例一:
public void fun1(){
String str = "hello3478,javaWorld67,hello";
String regex = "\\d+";
Pattern p = Pattern.compile(regex);//得到一个指定正则表达式 规范的模板
String[] s = p.split(str);//按照指定的正则表达式进行拆分字符串
for (String a:s){
System.out.print(a);
}
}
例二:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestMatcher {
private void fun1(){
String str = "hello734,wo jiao 2352余松霖";
String regex = "[a-zA-Z]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);//得到一个匹配器
String text = m.replaceAll("*");
System.out.println(text);
}
public static void main(String[] args) {
TestMatcher t = new TestMatcher();
t.testFun();
}
private void testFun() {
String tel = "086-010-87455251";
String regex = "(\\d+)-(\\d+)-(\\d+)";
Matcher m = Pattern.compile(regex).matcher(tel);
if(m.matches()){
System.out.println("国家代码:"+m.group(1));
System.out.println("区号:"+m.group(2));
System.out.println("电话号码:"+m.group(3));
}else
System.out.println("错误");
String regex1 = "\\d{3,8}";
Matcher m1 = Pattern.compile(regex1).matcher(tel);
System.out.println(m1.matches());
m.reset();//重置匹配器,使用find方法查找子序列时,最好重置匹配器
while (m1.find()){//判断tel字符串中,是否有匹配的正则表达式的子序列
//System.out.println(m1.start()+" "+m1.end());//返回的开始和技术索引
System.out.println(tel.substring(m1.start(),m1.end()));
}
}
}
IO流——网络编程——正则表达式综合练习
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;
/ **
* @author Administrator
*写一个服务器,要求根据用户 输入文件路径(要求用户可以输入一个文件,或文件夹路径,注意要是文件夹,可能文件夹中还嵌套这文件夹)
*中找出文件里面里面存放的用户指定信息(比如邮箱) ,并把找出的信息(比如邮箱)
*保存到一个用户指定的文本文件中。
* /
public class FindEmail {
ServerSocket ss = null;
Socket s = null;
public void startServer(String course,String target) {
try {
ss = new ServerSocket(6666);
while (true) {
s = ss.accept();
new Thread(new FindEmailThread(s,course,target)).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
FindEmail fe = new FindEmail();
fe.startServer("f:" + File.separator + "test","f:");
}
}
class FindEmailThread implements Runnable {
private BufferedReader br1 = null;// 读取文件数据
private BufferedReader br2 = null;// 读取用户输入数据
private PrintStream ps1 = null;// 将用户需要的信息打印到控制台
private PrintStream ps2 = null;// 将用户需要的信息保存到文件中
private Socket s;
private String source; // 源文件或目录
private String target; // 要存放信息的文件
public FindEmailThread(Socket s,String source,String target) {
this.s = s;
this.source = source;
this.target = target;
}
public void run() {
try {
File file = new File(source);
ps1 = new PrintStream(s.getOutputStream());
br2 = new BufferedReader(new InputStreamReader(s.getInputStream()));
ps1.println("寻找邮箱请输入1,寻找手机号码请输入2");
String clientSay;
while ((clientSay = br2.readLine()) != null) {
if ("1".equals(clientSay)) {
ps2 = new PrintStream(new FileOutputStream(target
+ File.separator + "emailMsg.txt"));//邮箱的存放路径
String regex = "\\w+@\\w+\\.(com|cn|net|org|gov)";
judgeFile(file,ps1,ps2,regex); // 判断file是否是文件或目录,然后对其操作
break;
} else if ("2".equals(clientSay)) {
ps2 = new PrintStream(new FileOutputStream(target
+ File.separator + "phoneMsg.txt"));//手机号码的存放路径
String regex = "\\d{11}";
judgeFile(file,regex); // 判断file是否是文件或目录,然后对其操作
break;
} else
ps1.println("输入错误,寻找邮箱请输入1,寻找手机号码请输入2");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
close();
}
}
/ **
* @param file
* 判断此file是文件还是目录,然后对其操作
* /
private void judgeFile(File file,PrintStream ps1,PrintStream ps2,
String regex) {
if (file.isFile()) { //如果是文件就进行读取
this.readFile(file,regex);
} else { //如果是目录就进行遍历,找到目录下所有文件进行读取
File[] fs = file.listFiles();
for (int i = 0; i < fs.length; i++) {
judgeFile(fs[i],regex); //递归文件夹
}
}
}
/ **
* @param file
* 读取文本文件
* /
private void readFile(File file,
String regex) {
try {
br1 = new BufferedReader(new InputStreamReader(new FileInputStream(
file)));
StringBuffer sbf = new StringBuffer();//将文件的数据装在一个StringBuffer进行操作
String str;
while ((str = br1.readLine()) != null) {//读取文件
sbf.append(str);
}
String fileMsg = sbf.toString();
findMsg(fileMsg,regex); //
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
close();
}
}
/ **
* @param fileMsg
* 寻找用户需要的手机号码或者邮箱
* @param ps1
* /
private void findMsg(String fileMsg,
String regex) {
Matcher m=Pattern.compile(regex).matcher(fileMsg);
Set set = new HashSet();
m.reset();
while (m.find()){
set.add(fileMsg.substring(m.start(),m.end()));
}
for (String a : set) {
ps1.println(a + "\r\n");//打印到控制台
ps1.flush();
ps2.println(a + "\r\n");//输出到用户指定的文本文件中
ps2.flush();
}
}
/ **
* 关闭所有需要关闭的资源
* /
public void close() {
try {
if (br1 != null)
br1.close();
if (br2 != null)
br1.close();
if (ps1 != null)
br1.close();
if (ps2 != null)
br2.close();
if (s != null)
br1.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}