Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查字符是否是拉丁字母表的一部分?_Java - Fatal编程技术网

Java 检查字符是否是拉丁字母表的一部分?

Java 检查字符是否是拉丁字母表的一部分?,java,Java,在进一步处理之前,我需要测试字符是字母还是空格。所以,我 for (Character c : take.toCharArray()) { if (!(Character.isLetter(c) || Character.isSpaceChar(c))) continue; data.append(c); 一旦我检查了数据,我发现它包含的字符看起来像是拉丁字母表之外字符的unicode表示。我如何修改上述代码,使我的条件严格到只

在进一步处理之前,我需要测试字符是字母还是空格。所以,我

    for (Character c : take.toCharArray()) {
        if (!(Character.isLetter(c) || Character.isSpaceChar(c)))
            continue;

        data.append(c);
一旦我检查了数据,我发现它包含的字符看起来像是拉丁字母表之外字符的unicode表示。我如何修改上述代码,使我的条件严格到只接受[a-z][a-z]范围内的字母字符


正则表达式是一种方法,还是有更好(更快)的方法?

如果您特别想只处理这52个字符,那么只需处理它们:

public static boolean isLatinLetter(char c) {
    return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z');
}
public静态布尔字母(charc){

return(c>='A'&&c='A'&&c我会使用您为此指定的正则表达式。它易于阅读并且应该非常快速(特别是如果您静态分配它)。

如果您只想去掉非ASCII字母字符,那么一种快速方法是使用和正则表达式:

s.replaceAll("[^a-zA-Z]", "")

不能用文字扫描来描述性能和字符,追加到<代码> StringBuilder < /代码>。

等等,你为什么要考虑“EY”?不是字母吗?通常人们都在寻找方法,让他们的代码更好地处理国际输入,而不是更糟…@Borealid,在我的例子中,控制字符是一个奇怪的现象,我目前正在进一步研究。
é
当然是一个有效字符,就我的程序而言,它不应该存在。这样做的正则表达式s是用
\p{sc=Latin}
检查拉丁脚本属性。相关:你能提供一个正确的例子吗?我想看看什么更快。在这个地方,时间已经很晚了,所以我担心你必须等待代码,特别是如果你想编译的话:)但是,顺便说一句,此时您可能过于关注速度。这肯定不是您执行的最慢的操作吗?优化未来开发人员(可能是您!)花时间试图理解这段代码。在我的测试中,一次使用1个字符的速度大约快30%。但这肯定是一个有效的建议和方法。谢谢。我很想看看使用
s.replaceAll(“[^a-zA-Z]+”)
s.replaceAll([^a-zA-Z]*”,“)的结果
@SamuelEdwinWard哇。速度是
[^a-zA-Z]+
的两倍,比按字符排列的快一倍