一个从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字符 * @param character * @return */public static boolean isEmailLetter(char character) {int ascii = character;// System.out.println(ascii);// A-Z 65 - 90if (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;if (isEmailLetter(c)) {buff.append(c);} else {break;}i--;}buff.reverse();buff.append("@");// @后项扫描i = index + 1;while (i < content.length()) {char c = chars;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毫秒
页:
[1]