有没有更有效(也不那么乏味)的方法来做到这一点?

时间:2014-07-14 21:27:52

标签: java

对于家庭作业,我必须基于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;
        }
    }
}

3 个答案:

答案 0 :(得分:11)

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

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

你需要注意几点,看看为什么会这样:

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

答案 1 :(得分:2)

当然有更有效的方法。 1.字符&#39; a&#39;到&#39; z&#39;在诸如Unicode和ASCII之类的标准中是连续的整数。因此,您可以执行if(ch&gt; 0&#39;&amp;&amp; ch&lt; =&#39; z&#39;),而不是单独检查每个。 此外,您可以尝试使用:return(Character.isLetter(ch));

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

答案 2 :(得分:1)

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

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

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