繁体   English   中英

有没有更有效(和更少乏味)的方式来做到这一点?

[英]Is there eny more efficient (and less tedious) way to do this?

对于家庭作业,我必须基于Character.isJavaIdentifierStart创建自己的方法。 它应该只考虑字符'a'到'z'(大写和小写),'$'和'_'才有效。 它返回一个布尔值。 我错过了一种更简单的方法吗?

public static boolean myIsJavaIdentifierStart(char ch) {
    if (ch == '$' || ch == '_') {
        return true;
    }
    else {
        switch (ch) {
            case 'a':return true;
            case 'b':return true;
            case 'c':return true;
            case 'd':return true;
            case 'e':return true;
            case 'f':return true;
            case 'g':return true;
            case 'h':return true;
            case 'i':return true;
            case 'j':return true;
            case 'k':return true;
            case 'l':return true;
            case 'm':return true;
            case 'n':return true;
            case 'o':return true;
            case 'p':return true;
            case 'q':return true;
            case 'r':return true;
            case 's':return true;
            case 't':return true;
            case 'u':return true;
            case 'v':return true;
            case 'w':return true;
            case 'x':return true;
            case 'y':return true;
            case 'z':return true;
            case 'A':return true;
            case 'B':return true;
            case 'C':return true;
            case 'D':return true;
            case 'E':return true;
            case 'F':return true;
            case 'G':return true;
            case 'H':return true;
            case 'I':return true;
            case 'J':return true;
            case 'K':return true;
            case 'L':return true;
            case 'M':return true;
            case 'N':return true;
            case 'O':return true;
            case 'P':return true;
            case 'Q':return true;
            case 'R':return true;
            case 'S':return true;
            case 'T':return true;
            case 'U':return true;
            case 'V':return true;
            case 'W':return true;
            case 'X':return true;
            case 'Y':return true;
            case 'Z':return true;
            default: return false;
        }
    }
}

还有很多其他方法可以做到这一点,但也许最简单的方法之一就是扩展您已经拥有的方法顶部的东西:

return ch == '$'
    || ch == '_'
    || (ch >= 'a' && ch <= 'z')
    || (ch >= 'A' && ch <= 'Z');

您需要注意几个问题,看看为什么会这样:

  • 您正在返回一个boolean ,因此可以直接使用任何布尔表达式,而不使用if语句
  • UNICODE中字母A .. Za .. z代码点是连续的 ,使您能够使用一对>=<=检查检查[A..Z][a..z]间隔的成员资格。

当然有更有效的方法。 1. Unicode和ASCII等标准中的字符“a”到“z”是连续的整数。 因此,您可以执行if(ch> 0'a'&& ch <='z'),而不是单独检查每个。 此外,您可以尝试使用:return(Character.isLetter(ch));

请参阅以下参考: - 所有Java字符函数的列表: http//docs.oracle.com/javase/7/docs/api/java/lang/Character.html

if ((ch >= 'a' && ch <= 'z') || (ch >='A' && ch <= 'Z'))
    return true;

或者,如果要将其转换为字符串/字符,可以使用toLower:

Character lower = Character.toLowerCase(ch);
if (ch >= 'a' && ch <= 'z')
    return true;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM