问题出在哪里?可能的问题已经在注释中标出
代码如下
package test;
import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class email {
public static void main(String[] args) {
String regex="[a-zA-Z_0-9]+@(\\.[a-zA-Z_0-9]{2,3})+";
String s="";
String line=null;
try{
URL url=new URL("http://tieba.baidu.com/p/4232750852");
HttpURLConnection uc=(HttpURLConnection)url.openConnection();
BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream()));
PrintWriter pw=new PrintWriter(new FileWriter("d:\\data.txt"),true);
while((line=br.readLine())!=null){
s=s+line;//如果s用StringBuilder或者StringBuffer代替(s=null)则抛出 NullPointerException
}
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(s);
while(m.find()){
pw.println(m.group());
}
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
package com.zzk.ceshi;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GetMail {
public static void main(String[] args) {
String regex="\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,}\\b";
// String s="";
StringBuilder s = new StringBuilder("");
String line=null;
try{
URL url=new URL("http://tieba.baidu.com/p/4232750852");
HttpURLConnection uc=(HttpURLConnection)url.openConnection();
BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream()));
PrintWriter pw=new PrintWriter(new FileWriter("d:\\data.txt"),true);
while((line=br.readLine())!=null){
//s=s+line;//如果s用StringBuilder或者StringBuffer代替(s=null)则抛出 NullPointerException
s.append(line);
}
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(s);
while(m.find()){
pw.println(m.group());
}
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
```package com.zzk.ceshi;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GetMail {
public static void main(String[] args) {
String regex="\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,}\\b";
// String s="";
StringBuilder s = new StringBuilder("");
String line=null;
try{
URL url=new URL("http://tieba.baidu.com/p/4232750852");
HttpURLConnection uc=(HttpURLConnection)url.openConnection();
BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream()));
PrintWriter pw=new PrintWriter(new FileWriter("d:\data.txt"),true);
while((line=br.readLine())!=null){
//s=s+line;//如果s用StringBuilder或者StringBuffer代替(s=null)则抛出 NullPointerException
s.append(line);
}
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(s);
while(m.find()){
pw.println(m.group());
}
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
换成StringBuilder怎么会有问题呢?

首先,原因很简单:你的正则错误了,另外,用StringBuffer没有问题,只是你用的不对。修正代码如下:
public static void main(String[] args) {
String regex="\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
String line=null;
try{
URL url=new URL("http://tieba.baidu.com/p/4232750852");
HttpURLConnection uc=(HttpURLConnection)url.openConnection();
BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream()));
PrintWriter pw=new PrintWriter(new FileWriter("d:\\data.txt"),true);
StringBuffer buffer = new StringBuffer();
while((line=br.readLine())!=null){
buffer.append(line);
}
String s = buffer.toString();
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(s);
while(m.find()){
pw.println(m.group());
}
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
运行看看,data.txt里面就有邮箱信息啦。
public class Test {
public static void main(String[] args) {
// String regex = "[a-zA-Z_0-9]+@(\.[a-zA-Z_0-9]{2,3})+";
String regex ="[a-zA-Z0-9]{5,13}+@+[a-zA-Z0-9]{2,5}";
StringBuffer sb=new StringBuffer();
String path="d:/data.txt";
String line = null;
try {
URL url = new URL("http://tieba.baidu.com/p/4232750852");
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream()));
File file=new File(path);
if(!(file.exists())){
file.createNewFile();
}
PrintWriter pw = new PrintWriter(new FileWriter(path),true);
while ((line = br.readLine()) != null) {
sb.append(line+"\n");// 如果s用StringBuilder或者StringBuffer代替(s=null)则抛出
// NullPointerException
}
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sb);
while (m.find()) {
pw.println(m.group());
}
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}