问题描述
我有一个开关盒,用于检查字符是否为“=”或“-”或“+” 但我也喜欢检查 char 是否是 0-9 之间的数字
public static Token get(char ch) {
switch (ch) {
case '-' :
case '+':
case '=':
return new Token(ch);
case Character.isDigit(ch): // this dosn't work
{
}
}
}
我可以用什么替换 Character.isDigit?
解决方法
您可以为十位数字字符定义显式 case
语句:
public static Token get(char ch) {
switch (ch) {
case '-' :
case '+':
case '=':
return new Token(ch);
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
// handle digit case
break;
}
}
注意,这里我们只是让所有数字字符的情况汇入一个点进行处理。
,这行不通,因为 switch case 会将您的 char ch
变量与 switch case 进行比较以获得匹配。 Character.isDigit(ch):
返回一个布尔值,不能直接与 char ch
进行比较。
我建议您使用另一种方法,在默认情况下检查您的情况。
public static Token get(char ch) {
switch (ch) {
case '-' :
case '+':
case '=':
return new Token(ch);
default:
if(Character.isDigit(ch){
//enter code here
}
}
}
,
其他答案是正确和好的。我要补充两点:
- 对您的逻辑使用
switch
语句可能会模糊意图而不是澄清意图。在您的特定情况下使用一系列if-then
可能更有意义。 - Java 中的
char
类型已过时,甚至无法表示 Unicode 中定义的一半字符。尽管在此特定代码中使用char
会起作用,但我建议您不要养成使用char
的习惯。相反,学习使用 code point 整数代替。
您可以轻松确定代码点。
String input = "?";
int codePoint = input.codePointAt( 0 );
128567
调用 Character.toString
以获取包含单个字符的 String
对象,该字符由该特定代码点整数表示。
示例代码。
public class Token
{
public static Token get ( int codePoint )
{
if ( "-+=".contains( Character.toString( codePoint ) ) )
{
// Do operator stuff.
return new OperatorToken( codePoint );
} else if ( Character.isDigit( codePoint ) )
{
// Do digit stuff.
return new DigitToken( codePoint );
} else
{
// Do default stuff.
return new DefaultToken( codePoint );
}
}
}