在进一步处理之前,我需要测试字符是字母还是空格。所以,我
for (Character c : take.toCharArray()) {
if (!(Character.isLetter(c) || Character.isSpaceChar(c)))
continue;
data.append(c);
一旦我检查了数据,我看到它包含的字符看起来像拉丁字母表外的字符的unicode表示。如何修改上面的代码以收紧条件,只接受[a-z] [A-Z]范围内的字母字符?
Regex是一种可行的方式,还是有一种更好(更快)的方式?
答案 0 :(得分:15)
如果您特别想要处理这52个字符,那么只需处理它们:
public static boolean isLatinLetter(char c) {
return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}
答案 1 :(得分:2)
如果您只想删除非ASCII字母字符,那么快速方法是使用String.replaceAll()
和Regex:
s.replaceAll("[^a-zA-Z]", "")
不能说出性能与字符扫描相关的任何内容,并附加到StringBuilder
。
答案 2 :(得分:1)
我会使用您为此指定的正则表达式。它易于阅读并且应该非常快速(特别是如果你静态分配它)。