在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);
答案 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);
}