【问题标题】:java check if char is number in switch case statment [closed]java检查char是否是switch case语句中的数字[关闭]
【发布时间】:2021-05-31 05:07:28
【问题描述】:
我有一个 switch case 检查 char 是 "=" 或 "-" 还是 "+"
但我也想检查 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?
【问题讨论】:
标签:
java
switch-statement
isnumeric
【解决方案1】:
您可以为十位字符定义明确的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;
}
}
这里注意,我们只是让所有的数字字符case都流到一个点来处理。
【解决方案2】:
这是行不通的,因为 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
}
}
}
【解决方案3】:
其他答案是正确和好的。我要补充两点:
- 为您的逻辑使用
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 );
}
}
}