A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田建 高级黑马   /  2012-6-22 09:42  /  1833 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田建 于 2012-6-24 07:48 编辑

直接上代码
  1. import java.net.*;
  2. import java.io.*;
  3. import java.util.regex.*;
  4. class RegexTest_2
  5. {
  6. public static void main(String[] args)throws Exception
  7. {
  8. getMails();
  9. }
  10. public static void getMails()throws Exception
  11. {
  12. URL url=new URL("http://www.baidu.com/s?wd=%D3%CA%CF%E4%B5%D8%D6%B7&tn=your_pg");
  13. URLConnection conn=url.openConnection();
  14. BufferedReader bufr=new BufferedReader(new InputStreamReader(conn.getInputStream()));
  15. String line=null;
  16. String mailreg="\\w+@\\w+(\\.\\w+)+";
  17. Pattern p=Pattern.compile(mailreg);
  18. while((bufr.readLine())!=null)
  19. {
  20. Matcher m=p.matcher(line);
  21. while(m.find())
  22. {
  23. System.out.println(m.group());
  24. }

  25. }
  26. }
  27. }
复制代码
不知啥问题!

`F)DJOS1KZXE)C[0@[U$~~C.jpg (33.48 KB, 下载次数: 23)

`F)DJOS1KZXE)C[0@[U$~~C.jpg

4 个回复

正序浏览
丁二跃 发表于 2012-6-22 10:10
这个异常很好找啊。空指针异常:先看爆出异常的最后一行,可以看出异常在main方法,代码第8行。第8行调用ge ...

多谢!!是我疏忽了!
回复 使用道具 举报
呵呵,楼主正在学习正则表达式RegularExpressions
我把它叫:字符串处理利器

原理:
1.定义一模式
用到类:java.util.regex.Pattern;
2.匹配
用到类:java.util.regex.Mather;

我自己写了一个是查找本地网页的


/*
  查找网页中Email地址
  用到正则表达式
  */

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailSpider {

public static void main(String[] args)
{
       //用BufferedReader目的读取一行
       try {
            BufferedReader
  
            br = new BufferedReader(new FileReader("c:\\20120621.html"));
  
           String line = null;

            while((line = br.readLine())!= null)           //楼主这个地方改一下,就ok了
             {
                 parse(line);
   
            }
             } catch (FileNotFoundException e1) {
                    // TODO Auto-generated catch block
                       e1.printStackTrace();

              } catch (IOException e) {
                           // TODO Auto-generated catch block
                        e.printStackTrace();
          }
         }
private static void parse(String line)
{
         //建立模式
         Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");
       //匹配
         Matcher m = p.matcher(line);
  
        while(m.find())
       {
            System.out.println(m.group());
       }
  
      }

   }


有许多人一起在做同一件事,呵呵

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
职业规划-刘倩老师 + 1
田建 + 1 多谢了啊!

查看全部评分

回复 使用道具 举报
本帖最后由 黑马—陈磊 于 2012-6-22 10:38 编辑

public static void getMails() throws Exception

        {

                URL url = new URL(
                                "http://www.baidu.com/s?wd=%D3%CA%CF%E4%B5%D8%D6%B7&tn=your_pg");

                URLConnection conn = url.openConnection();

                BufferedReader bufr = new BufferedReader(new InputStreamReader(conn
                                .getInputStream()));

                String line = null;

                String mailreg = "\\w+@\\w+(\\.\\w+)+";

                Pattern p = Pattern.compile(mailreg);

                while ((line=bufr.readLine()) != null)      // 读取返回的字符串没有赋给line ,所以line为null,报了空指针异常  ,这样修改就可以了    

                {

                        Matcher m = p.matcher(line);

                        while (m.find())

                        {

                                System.out.println(m.group());

                        }

                }

        }
结果:

评分

参与人数 1黑马币 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 丁二跃 于 2012-6-22 10:14 编辑

这个异常很好找啊。空指针异常:先看爆出异常的最后一行,可以看出异常在main方法,代码第8行。第8行调用getMails()方法。再看异常倒数第二行,显示错误在第20行,然后就可以仔细查看代码了。你会发现你的line没有被赋值,只在第15行进行了初始化。{:soso_e113:}

查找异常应该先从上面往下找,上面的总是先出错的地方,下面的异常可能是由上面引起的。先看最上面是什么异常,然后再看该异常的信息。此时应该从下面开始看,从大范围一级级定位到具体出错位置。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
黄奕豪 + 1 赞一个!
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马