java – 正则表达式很慢,如何检查一个字符串是否只有单词字符快
发布时间:2020-12-15 04:11:20 所属栏目:Java 来源:网络整理
导读:我有一个函数检查一个字符串(大多数字符串只有一个CJK字符)只有单词字符,它将被调用很多次,所以成本是不可接受的,但我不知道如何优化它,任何建议? /*w is equivalent to the character class [p{Ll}p{Lu}p{Lt}p{Lo}p{Nd}]. For more details see Unic
我有一个函数检查一个字符串(大多数字符串只有一个CJK字符)只有单词字符,它将被调用很多次,所以成本是不可接受的,但我不知道如何优化它,任何建议?
/*w is equivalent to the character class [p{Ll}p{Lu}p{Lt}p{Lo}p{Nd}]. For more details see Unicode TR-18,and bear in mind that the set of characters in each class can vary between Unicode releases.*/ private static final Pattern sOnlyWordChars = Pattern.compile("w+"); private boolean isOnlyWordChars(String s) { return sOnlyWordChars.matcher(s).matches(); } 当s为“3g”或“go_url”或“hao123”时,isOnlyWordChars(s)应该返回true. 解决方法private boolean isOnlyWordChars(String s) { char[] chars = s.toCharArray(); for (char c : chars) { if(!Character.isLetter(c)) { return false; } } return true; } 更好的实施 public static boolean isAlpha(String str) { if (str == null) { return false; } int sz = str.length(); for (int i = 0; i < sz; i++) { if (Character.isLetter(str.charAt(i)) == false) { return false; } } return true; } 或者,如果您使用的是Apache Commons,StringUtils.isAlpha().答案的第二个实现实际上来自isAlpha的源代码. UPDATE 对不起,迟到的回复.我不太确定速度,虽然我在几个地方读到循环比正则表达式更快.为了确保我在ideoone中运行以下代码,结果如下 5000000次迭代 使用您的代码:4.99秒(之后的运行时错误,因此对于大数据它不起作用) 用我的第一个代码2.71秒 用我的第二个代码2.52秒 进行500000次迭代 用你的代码:1.07秒 用我的第一个代码0.36秒 用我的第二个代码0.33秒 Here是我使用的示例代码. 注:可能会有小错误.您可以使用它来测试不同的场景.根据Jan的评论,我认为这些是使用私人或公共的小事.条件检查是一个很好的观点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |