求一个字符串中提取email地址的方法!急急急! 求一个在字符串中提取email地址的方法。不管该字符串有多长,内容有多复杂都要能准确的查找到所有的email地址,并以String数组的形式返回!有哪位大哥能给我写这么一个方法啊,小弟感激不尽! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以参看这个:常用正则表达式http://blog.csdn.net/wangrumeng/archive/2007/01/18/1486564.aspx其中邮件地址的正则表达式是:提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 我也是刚入门,正在找相关资料呢你看看这几个连接吧:http://blog.csdn.net/yqj2065/archive/2005/01/20/261790.aspxhttp://blog.csdn.net/lzq3180/archive/2007/01/31/1499332.aspxhttp://blog.csdn.net/yudinosaur/archive/2006/11/24/1412171.aspx 调试成功了/* * @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); }} 简单的正则表达式: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]); } }} \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 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); }} to luyang1016(闭月羞花猫) // 创建正则表达式模版 Pattern p = Pattern.compile(regexStr); // 创建Email字段匹配器,待查询字符串Data为其参数 Matcher emailMatcher = p.matcher(data); while (emailMatcher.find()) { System.out.println(emailMatcher.group()); }-----------开始我也是这样考虑的,不过这样不满足楼主的要求啊(输入一组数据,输出包含Email地址的String数组) //获取需要创建的String数组大小int size = emailMatcher.groupCount() - 1;//不清楚为什么要-1才是正确统计结果将这句修改为int size = emailMatcher.groupCount();可以修正空指针异常问题但是在某些情况下会导致多一个null的数据被存储在String数组中(不过不会报错了)我推测有可能和正则表达式// 提取Email所需的正则表达式regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";这一行有关,但怎么修正才能解决就超出我能力范围了 你再怎么改 regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";他的 emailMatcher.groupCount();也应该是3吧?因为它有3个括号。 劳烦懂Swing多线程的朋友~~~~求助~~~ 如何拆分 better 怎样设置背景图片??? jxl.jar Number类型问题 急急急 能帮我吗---J2SE Java领域现在比较火的是什么? 这样的界面怎么做呢 APPLET画图问题(有送分之嫌) 继承问题 JAVA操作系统编程 a question about class
常用正则表达式
http://blog.csdn.net/wangrumeng/archive/2007/01/18/1486564.aspx其中邮件地址的正则表达式是:提取信息中的邮件地址:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
你看看这几个连接吧: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
/*
* @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);
}
}
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]);
}
}
}
的做法显然是有问题的。//测试数据
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);
}
}
Pattern p = Pattern.compile(regexStr);
// 创建Email字段匹配器,待查询字符串Data为其参数
Matcher emailMatcher = p.matcher(data);
while (emailMatcher.find()) {
System.out.println(emailMatcher.group());
}-----------
开始我也是这样考虑的,不过这样不满足楼主的要求啊(输入一组数据,输出包含Email地址的String数组)
int size = emailMatcher.groupCount() - 1;//不清楚为什么要-1才是正确统计结果将这句修改为
int size = emailMatcher.groupCount();可以修正空指针异常问题
但是在某些情况下会导致多一个null的数据被存储在String数组中(不过不会报错了)我推测有可能和正则表达式
// 提取Email所需的正则表达式
regexStr = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";这一行有关,但怎么修正才能解决就超出我能力范围了
他的 emailMatcher.groupCount();也应该是3吧?因为它有3个括号。