比较Java中的字符

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 的单独字符串。


Alv*_*vin 6

你拥有的第一个声明可能不是你想要的...... 'A'|'B'|'C'实际上是按位操作:)

你的第二个陈述是正确的,但你将有21个OR.

如果21个字符是"连续的",则上述解决方案很好.

如果不是,您可以预先计算有效字符的哈希集并执行类似的操作

if (validCharHashSet.contains(symbol))...
Run Code Online (Sandbox Code Playgroud)


Ric*_*kin 5

将其写为带有fall through的switch语句可能会更清晰,例如

switch (symbol){
    case 'A':
    case 'B':
      // Do stuff
      break;
     default:
}
Run Code Online (Sandbox Code Playgroud)