Ale*_*lex 54 java comparison char
自从我完成任何Java以来已经有一段时间了,所以我的语法目前并不是最好的.
我想检查一个char变量是21个特定字符之一,我能做到这一点的最短路径是什么?
例如:
if(symbol == ('A'|'B'|'C')){}
Run Code Online (Sandbox Code Playgroud)
似乎没有工作.我需要写它:
if(symbol == 'A' || symbol == 'B' etc.)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 71
如果您的输入是一个字符,并且您要检查的字符大多是连续的,您可以尝试这样做:
if ((symbol >= 'A' && symbol <= 'Z') || symbol == '?') {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您的输入是字符串,则更紧凑的方法(但更慢)是使用带有字符类的正则表达式:
if (symbol.matches("[A-Z?]")) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果你有一个角色,你首先需要将它转换为字符串,然后才能使用正则表达式:
if (Character.toString(symbol).matches("[A-Z?]")) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*arc 11
如果您事先知道所有21个字符,则可以将它们全部写为一个字符串,然后像这样检查:
char wanted = 'x';
String candidates = "abcdefghij...";
boolean hit = candidates.indexOf(wanted) >= 0;
Run Code Online (Sandbox Code Playgroud)
我认为这是最短的方式.
小智 7
你可以使用这个:
if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".contains(String.valueOf(yourChar)))
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要创建包含字母 AZ 的单独字符串。
你拥有的第一个声明可能不是你想要的...... 'A'|'B'|'C'实际上是按位操作:)
你的第二个陈述是正确的,但你将有21个OR.
如果21个字符是"连续的",则上述解决方案很好.
如果不是,您可以预先计算有效字符的哈希集并执行类似的操作
if (validCharHashSet.contains(symbol))...
Run Code Online (Sandbox Code Playgroud)
将其写为带有fall through的switch语句可能会更清晰,例如
switch (symbol){
case 'A':
case 'B':
// Do stuff
break;
default:
}
Run Code Online (Sandbox Code Playgroud)