第一个问题:邮箱的正则式是什么,网上有很多邮箱正则式,但是都不适用。要读文件的内容是很多字符串,比如所<fjien>¥……fjiefne mail:joe at cs.stanford.edu(fenix#&(&(^&%%fjien fneifb...
第二个问题就是我将结果输入到email文件中去的时候不能输入完整的结果,往往只能打印最后一个字符串结果
import java.io.*;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class exercise6 {
@SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
String path="C:\\Users\\Administrator\\Desktop\\新建文件夹";
File file1=new File("email.txt");//存储结果的文件email
new PrintWriter(file1);//没有email文件的话建立一个
File fi=new File(path);
//path是要更改的文件所在的文件夹
File[] file=fi.listFiles();
System.out.println(file.length);//显示文件夹下的文件数
for (int i = 0; i < file.length; i++) {
String filepath=file[i].getAbsolutePath();
String cont = read(filepath);
//读取一个文件的内容存放在cont中
cont = cont.replaceAll(" at ", "@");
//更新源文件
write(findEmail(cont),file1);
System.out.print(findEmail(cont));//控制台显示筛选的完整的结果
//找出邮箱字符串并且将结果存放在file1中
}
}
public exercise6() {
}
public static String read(String path) {
File file = new File(path);
StringBuffer res = new StringBuffer();
String line = null;
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
while ((line = reader.readLine()) != null) {
res.append(line + "\n");//读出来的文本内容存在res里
}
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return res.toString();
}
public static void write(String cont, File dist) {
try {
PrintWriter output=new PrintWriter(dist);
output.print(cont);
output.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static String findEmail(String cont){//以下邮箱正则式有待搞清楚
Pattern pattern = Pattern.compile("@.*");
Matcher matcher = pattern.matcher(cont);
StringBuffer record=new StringBuffer();
while(matcher.find()){
record.append(matcher.group()+" ");
}
return record.toString();
}
}