一个从content中提取email的小方法

这两天搞了一个时间程序,就是定时每天将一个地方的数据导出到另一个地方,其中有个小功能是提取content中的email,写了这个小方法,感觉还算不错,贴上来摆摆


/**
* @author linliuwei
* @create 2010-6-11
*/
public class UEStringUtil {

private static Pattern pattern_email = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", Pattern.CASE_INSENSITIVE);

public static boolean isEmail(String email) {
if (email == null || email.length() < 1 || email.length() > 256)
return false;
return pattern_email.matcher(email).matches();
}

/**
* 是否有效的email字符[A-z a-z . - _]
* @param character
* @return
*/
public static boolean isEmailLetter(char character) {
int ascii = character;
// System.out.println(ascii);
// A-Z 65 - 90
if (ascii <= 90 && ascii >= 65) {
return true;
// a-z 97 - 122
} else if (ascii <= 122 && ascii >= 97) {
return true;
// . - _
} else if (ascii == 46 || ascii == 45 || ascii == 95) {
return true;
} else {
return false;
}
}

/**
* 从字符串中提取email
* @param content
* @return
*/
public static String parseEmail(String content) {
String email = "";
if (content == null || content.length() < 1) {
return email;
}
String token = "@";
StringBuilder buff = new StringBuilder();
char[] chars = content.toCharArray();
//找第1个@的位置
int index = content.indexOf(token);
while (index != -1) {
// @前项扫描
int i = index - 1;
while (i > 0) {
char c = chars[i];
if (isEmailLetter(c)) {
buff.append(c);
} else {
break;
}
i--;
}
buff.reverse();
buff.append("@");
// @后项扫描
i = index + 1;
while (i < content.length()) {
char c = chars[i];
if (isEmailLetter(c)) {
buff.append(c);
} else {
break;
}
i++;
}

String tmp = buff.toString();
if (isEmail(tmp)) {
//找到第1个匹配的email,终止扫描
index = -1;
email = tmp;
} else {
//继续找下一个@
index = content.indexOf(token, index + 1);
buff.delete(0, buff.length());
}
}
return email;
}

public static void main(String[] args) {
String test = "首先需@要创建一个SpriteFont文件。右击XNA项目的Content文件夹并@选择Add→New item。从对话框中@选择SpriteFont,起一个@名称(比如ourFont),然后点击Add。"
+ "现在@看到一个XML页面。最重abc@cnd要的一行是设置FontName属性,可以将这个属性改成你想要绘制的@abc@cnd字体。接下去一行可以设置字体大小,你也@可以在以后缩放字体大小。 "
+ "注意:你可abc@cnd以使用任@何安装在你@的计算机上的TrueType字体。要看到已经安@装的字体,可以打开C:目录(例如点击Start按钮,选择Run,并输入这个文件夹地址)。FontName列显示了可以指定的所有字体。例如,如果字体名称为Times New Roman (TrueType),你指定Times New Roman作为FontName 属性。 "
+ "注意:当在另一台电脑@上编译代码时,那台电脑上abc@cnd也必须装有@这个字体,否则会报错。当心:当发布你的程序时,请确保你检查了字体的版权。 创建了SpriteFont文件后,在linliuwei@taobao.com.cn类中添加一个SpriteFont变量:";
long start = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
parseEmail(test);
//System.out.print(parseEmail(test));
}
long end = System.currentTimeMillis();
System.out.println();
System.out.println((end - start) + " milliseconds");
}
}



循环扫描50000次,连续执行10次平均730毫秒
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值