比较Java中的字符

时间:2011-02-17 20:59:15

标签: java comparison char

自从我完成任何Java以来​​已经有一段时间了,所以我的语法目前并不是最好的。

我想检查一个char变量是21个特定字符之一,我能做到这一点的最短路径是什么?

例如:

if(symbol == ('A'|'B'|'C')){}

似乎没有用。我需要写它:

if(symbol == 'A' || symbol == 'B' etc.)

12 个答案:

答案 0 :(得分:70)

如果您的输入是一个字符,并且您要检查的字符大多是连续的,您可以尝试:

if ((symbol >= 'A' && symbol <= 'Z') || symbol == '?') {
    // ...
}

但是,如果您的输入是字符串,则更紧凑的方法(但更慢)是使用带有字符类的正则表达式:

if (symbol.matches("[A-Z?]")) {
    // ...
}

如果您有角色,首先需要将其转换为字符串才能使用正则表达式:

if (Character.toString(symbol).matches("[A-Z?]")) {
    // ...
}

答案 1 :(得分:11)

如果你事先知道所有21个字符,你可以将它们全部写成一个字符串,然后像这样检查:

char wanted = 'x';
String candidates = "abcdefghij...";
boolean hit = candidates.indexOf(wanted) >= 0;

我认为这是最短的方式。

答案 2 :(得分:6)

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

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

如果21个字符是“连续的”,则上述解决方案没问题。

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

的操作
if (validCharHashSet.contains(symbol))...

答案 3 :(得分:3)

它可能更清晰地写成一个转换声明,例如。

switch (symbol){
    case 'A':
    case 'B':
      // Do stuff
      break;
     default:
}

答案 4 :(得分:3)

如果你有特定的字符应该是:

Collection<Character> specificChars = Arrays.asList('A', 'D', 'E');  // more chars
char symbol = 'Y';
System.out.println(specificChars.contains(symbol));   // false
symbol = 'A';
System.out.println(specificChars.contains(symbol));   // true           

答案 5 :(得分:2)

使用Guava

if (CharMatcher.anyOf("ABC...").matches(symbol)) { ... }

或者,如果其中许多字符是范围,例如“A”到“U”,但有些不是:

CharMatcher.inRange('A', 'U').or(CharMatcher.anyOf("1379"))

您也可以将其声明为static final字段,这样就不必每次都创建匹配器。

private static final CharMatcher MATCHER = CharMatcher.anyOf("ABC...");

答案 6 :(得分:1)

选项2可行。您还可以使用Set<Character>

char[] myCharSet = new char[] {'A', 'B', 'C', ...};
Arrays.sort(myCharSet);
if (Arrays.binarySearch(myCharSet, symbol) >= 0) { ... }

答案 7 :(得分:1)

你可以用这个:

if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".contains(String.valueOf(yourChar)))

请注意,您无需使用字母A-Z创建单独的字符串。

答案 8 :(得分:0)

是的,你需要像第二行一样写出来。 Java没有第一行的python样式语法糖。

或者,您可以将有效值放入数组中,并检查数组中是否存在symbol

答案 9 :(得分:0)

伪代码,因为我没有java sdk:

Char candidates = new Char[] { 'A', 'B', ... 'G' };

foreach(Char c in candidates)
{
    if (symbol == c) { return true; }
}
return false;

答案 10 :(得分:0)

你可以把你的字符写成字符串并使用equals方法。

例如:

String firstChar = "A";
String secondChar = "B";
String thirdChar = "C";


    if (firstChar.equalsIgnoreCase(secondChar)) || 
            (firstChar.equalsIgnoreCase(thirdChar))) // As many equals as you want
    {
        System.out.println(firstChar + " is the same as " + secondChar);
    }
    else 
    {
        System.out.println(firstChar + " is different than " + secondChar);
    }

答案 11 :(得分:0)

使用中使用重载便利工厂方法构建的List<Character>来实现此目的的一种方法是:

if(List.of('A','B','C','D','E').contains(symbol) {
    // do something
}