求一个在字符串中提取email地址的方法。不管该字符串有多长,内容有多复杂
都要能准确的查找到所有的email地址,并以String数组的形式返回!有哪位大哥能给我写这么一个方法啊,小弟感激不尽!

解决方案 »

  1.   

    可以参看这个:
    常用正则表达式
    http://blog.csdn.net/wangrumeng/archive/2007/01/18/1486564.aspx其中邮件地址的正则表达式是:提取信息中的邮件地址:
    \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
      

  2.   

    我也是刚入门,正在找相关资料呢
    你看看这几个连接吧:http://blog.csdn.net/yqj2065/archive/2005/01/20/261790.aspx
    http://blog.csdn.net/lzq3180/archive/2007/01/31/1499332.aspx
    http://blog.csdn.net/yudinosaur/archive/2006/11/24/1412171.aspx
      

  3.   

    调试成功了
    /*
     * @author talent_marquis<甜菜侯爵>
     * Email: [email protected]
     * Copyright (C) 2007 talent_marquis<甜菜侯爵>
     * All rights reserved.
     */
    package regex.info;import java.util.regex.*;public class EmailInfo
    {
    private String regexStr;
    private String emailAddress[];

    /*
     *  获取输入数据中包含的Email地址
     *  返回储存该Email地址的String数组
     */
    public String[] getEmailInfo(String data)
    {
    //提取Email所需的正则表达式
    regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
    //创建正则表达式模版
    Pattern p = Pattern.compile(regexStr);
    //创建Email字段匹配器,待查询字符串Data为其参数
    Matcher emailMatcher = p.matcher(data);
    //获取需要创建的String数组大小
    int size = emailMatcher.groupCount() - 1; //不清楚为什么要-1才是正确统计结果
    //Email存储String数组 String emailAddress[];
    emailAddress = new String[size];
    //将Email地址存储在String数组中
    for(int i = 0 ; emailMatcher.find(); i++ ) 
    {
    emailAddress[i]=emailMatcher.group();
                //测试输入,使用时删除
    print(emailAddress[i]);            
    }

    return emailAddress;
    }

    public static void main(String args[])
    {
    EmailInfo e = new EmailInfo();
    //测试数据
    String testData = "afdadfqpowier, [email protected][email protected] asdfawqe/,xcnvq;qtqpr";

    String someDateFile[] = e.getEmailInfo(testData);
    for(String str : someDateFile)
    {
    print(str);
    }

    }

    public static void print(Object o)
    {
    System.out.println(o);
    }
    }
      

  4.   

    简单的正则表达式:
    class h{
    public static void main(String []args){
    String s=new String("to,d,t,eee,e,h");
    String[] shuchu=s.split(",");
    for(int i=0;i<shuchu.length;i++){
    System.out.println(shuchu[i]);
    }

    }
    }
      

  5.   

    \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
      

  6.   

    talent_marquis(甜菜侯爵) ( ) 信誉:97    Blog 
    的做法显然是有问题的。//测试数据
    String testData = "afdadfqpowier, [email protected][email protected] asdfawqe/,xcnvq;qtqpr [email protected] ";的时候,会发生错误
    错误的原因也正是这样一句话
    Matcher emailMatcher = p.matcher(data);
    //获取需要创建的String数组大小
    int size = emailMatcher.groupCount() - 1;//不清楚为什么要-1才是正确统计结果
    emailMatcher.groupCount() 的结果应该和
    regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"; 直接相关。
    本程序中,他的结果是中是3
    也就是说  int size 肯定等于 2这个时候
    for(int i = 0 ; emailMatcher.find(); i++ ) 
    {
    emailAddress[i]=emailMatcher.group();
                //测试输入,使用时删除
    print(emailAddress[i]);            
    }
    如果 emailMatcher.find() ,查找出3个符合要求的,就出了数组溢出了。不妨将source座如下修改/*
     * @author talent_marquis<甜菜侯爵>
     * Email: [email protected]
     * Copyright (C) 2007 talent_marquis<甜菜侯爵>
     * All rights reserved.
     */
    package org.luyang.lang;import java.util.regex.*;public class EmailInfo {
        private String regexStr;    // private String emailAddress[];    /*
         * 获取输入数据中包含的Email地址 返回储存该Email地址的String数组
         */
        public void getEmailInfo(String data) {
            // 提取Email所需的正则表达式
            regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";        // 创建正则表达式模版
            Pattern p = Pattern.compile(regexStr);
            // 创建Email字段匹配器,待查询字符串Data为其参数
            Matcher emailMatcher = p.matcher(data);
            while (emailMatcher.find()) {
                System.out.println(emailMatcher.group());        }        // return emailAddress;
        }    public static void main(String args[]) {
            EmailInfo e = new EmailInfo();
            // 测试数据
            String testData = "afdadfqpowier, [email protected][email protected] asdfawqe/,xcnvq;qtqpr  [email protected]";
            e.getEmailInfo(testData);
        }
    }
      

  7.   

    to luyang1016(闭月羞花猫)         // 创建正则表达式模版
            Pattern p = Pattern.compile(regexStr);
            // 创建Email字段匹配器,待查询字符串Data为其参数
            Matcher emailMatcher = p.matcher(data);
            while (emailMatcher.find()) {
                System.out.println(emailMatcher.group());
            }-----------
    开始我也是这样考虑的,不过这样不满足楼主的要求啊(输入一组数据,输出包含Email地址的String数组)
      

  8.   

    //获取需要创建的String数组大小
    int size = emailMatcher.groupCount() - 1;//不清楚为什么要-1才是正确统计结果将这句修改为
    int size = emailMatcher.groupCount();可以修正空指针异常问题
    但是在某些情况下会导致多一个null的数据被存储在String数组中(不过不会报错了)我推测有可能和正则表达式
    // 提取Email所需的正则表达式
    regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";这一行有关,但怎么修正才能解决就超出我能力范围了
      

  9.   

    你再怎么改 regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
    他的 emailMatcher.groupCount();也应该是3吧?因为它有3个括号。