定义isJavaIdentifierStart方法

时间:2013-11-18 14:00:33

标签: java methods char boolean

在Java的Character类中,有一个名为isJavaIdentifierStart(char ch)的方法。此方法确定char参数是否允许作为Java标识符中的第一个字符。当且仅当字符是(1)字母时,字符才可以启动Java标识符; (2)货币符号(即“$”);或者(3)连接标点字符(即,作为下划线的'_')。如果字符可以启动Java标识符,则此方法返回true;否则就是假的。

如何定义自己的isJavaIdentifierStart方法?到目前为止,我有:

public class MyCharacter {

  public static boolean isJavaIdentifierStart(char c) {
     return true;
  }

}

//('a') == true);
//('7') == false);
//('_') == true);
//('$') == true);
//('Z') == true);
//('.') == false);

4 个答案:

答案 0 :(得分:1)

由于您开始以switch/case/default方式开始这样做:

   public static boolean isJavaIdentifierStart(char c) {
         switch (c) {
         case 'a' : return true;
         //Fill other cases
         default: return false; //default is false
      }        
    }

你也可以尝试一些if else块:

   public static boolean isJavaIdentifierStart(char c) {
         if(c=='a'){
             return true;
         }else if(c=='_'){
             return true;
         }else if (){//Fill other cases
         }else return false; //default is false
      }        
    }

答案 1 :(得分:1)

您可以使用正则表达式:

return String.valueOf(c).matches("[a-z$_]");

在字符类之间添加其他允许的字符:

[a-z$£€_.-]

请注意,短划线字符-必须放在字符类的开头[-...]或结尾[...-]

答案 2 :(得分:0)

您可以使用 switch - case 来实施,例如

public static boolean isJavaIdentifierStart(char c) {

    switch(c)
    {
    case 'a':
    case '_':
    case '$':
    case 'Z': return true;

    case '7':
    case '.': return false;
  }
  return false;
}

答案 3 :(得分:0)

另一个解决方案可能是使用一组允许的字符,并检查Set是否包含给定的char:

private static final Set<Character> ALLOWED_JAVA_IDENTIFIER_STARTS;

static {
    Set<Character> allowedJavaIdentifierStarts = new HashSet<Character>();
    for (char c = 'a'; c <= 'z'; c++) {
        allowedJavaIdentifierStarts.add(c);
    }
    allowedJavaIdentifierStarts.addAll(Arrays.asList('$', '£', 'z'));
    allowedJavaIdentifierStarts.addAll(Arrays.asList('.', '-', '_'));
    ALLOWED_JAVA_IDENTIFIER_STARTS = Collections.unmodifiableSet(allowedJavaIdentifierStarts);
}

public static boolean isJavaIdentifierStart(char c) {
    return ALLOWED_JAVA_IDENTIFIER_STARTS.contains(c);
}