求一个在字符串中提取email地址的方法。不管该字符串有多长,内容有多复杂
都要能准确的查找到所有的email地址,并以String数组的形式返回!
有哪位大哥能给我写这么一个方法啊,小弟感激不尽!
------解决方案--------------------
调试成功了
/*
* @author talent_marquis <甜菜侯爵>
* Email: talent_marquis@163.com
* 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, a@asdfa.cn, wer@163.com asdfawqe/,xcnvq;qtqpr ";
String someDateFile[] = e.getEmailInfo(testData);
for(String str : someDateFile)
{
print(str);
}
}
public static void print(Object o)
{
System.out.println(o);
}
}
------解决方案--------------------
talent_marquis(甜菜侯爵) ( ) 信誉:97 Blog
的做法显然是有问题的。
//测试数据
String testData = "afdadfqpowier, a@asdfa.cn, wer@163.com asdfawqe/,xcnvq;qtqpr aa@chinaren.com.cn ";
的时候,会发生错误
错误的原因也正是这样一句话
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: talent_marquis@163.com
* 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;
}