这两天搞了一个时间程序,就是定时每天将一个地方的数据导出到另一个地方,其中有个小功能是提取content中的email,写了这个小方法,感觉还算不错,贴上来摆摆
循环扫描50000次,连续执行10次平均730毫秒
/**
* @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毫秒