雄鸡配什么作用?

扶朗煜扶朗煜最佳答案最佳答案

泻药,这题我会。 之前做过一个项目,其中要用到正则表达式验证手机号,但是普通的正则无法匹配手机中可能出现的符号(比如,我大天朝某运营商的号段有可能是5个7),于是,我写了下面这段代码,完美地解决了问题:

String regx = "^((13[0-9])|(14[5,6])|(15[^4])|(17[0-8])|(18[0-9])|(19[8,9]))\\d{8}$"; // 完整的正则表达式

Pattern pat = Pattern.compile(regx);

Matcher mat = pat.matcher("1366233888"); // 用matcher()测试是否匹配

System.out.println(mat.find()); // 如果找到匹配,返回true

这个正则表达式中包含一个隐式转换(将数字转换为字符串再与另一个字符串进行比较),在Java中这种技术叫做“类型系统中的强制转换”,它允许你将一个数值型数据直接作为参数传递给某个只接受字符串形参的方法。

因为Java的类库中的很多方法都是接收字符串形式的参数,因此这种方法很常用,如果你不想显式地将数值型数据进行转义的话。 然而,这种技术是有代价的——性能非常差!如果应用广泛,你不得不为了性能优化而专门写一段代码来处理这个问题。

最近我发现了一个更好的解决方案——使用Intl类中的toLocaleString()方法。下面是使用的代码,测试通过:

public static boolean checkMobile(String mobile) { return toCheck.test(mobile.toLocaleString()); }

该方法的参数是一个本地化字符串,它会自动利用Java虚拟机中本地化的资源,因此能够以极快的速度完成匹配。 另外,我还发现java.util包下的Date类也能够轻松实现本地化时间格式的输出,效率也非常高(测试环境是Oracle Java 7)。

我来回答
请发表正能量的言论,文明评论!