it-swarm.com.de

Zeichen in Java vergleichen

Es ist schon eine Weile her, seit ich Java gemacht habe, daher ist meine Syntax im Moment nicht die beste.

Ich möchte prüfen, ob eine Zeichenvariable eine von 21 spezifischen Zeichen ist. Wie kann ich dies am kürzesten tun?

Zum Beispiel:

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

Scheint nicht zu funktionieren. Muss ich es schreiben wie:

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

Wenn Ihre Eingabe ein Zeichen ist und die Zeichen, mit denen Sie prüfen, meistens aufeinander folgen, können Sie Folgendes versuchen:

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

Wenn Ihre Eingabe jedoch eine Zeichenfolge ist, besteht ein kompakterer Ansatz (wenn auch langsamer) darin, einen regulären Ausdruck mit einer Zeichenklasse zu verwenden:

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

Wenn Sie ein Zeichen haben, müssen Sie es zuerst in eine Zeichenfolge konvertieren, bevor Sie einen regulären Ausdruck verwenden können:

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

Wenn Sie alle Ihre 21 Zeichen im Voraus kennen, können Sie sie alle als einen String schreiben und dann wie folgt überprüfen:

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

Ich denke, das ist der kürzeste Weg.

11
Marc

Die erste Anweisung, die Sie haben, ist wahrscheinlich nicht das, was Sie wollen ... 'A'|'B'|'C' führt die bitweise Operation aus :)

Ihre zweite Aussage ist richtig, aber Sie haben 21 ODERs.

Wenn die 21 Zeichen "aufeinanderfolgend" sind, sind die oben genannten Lösungen in Ordnung.

Wenn nicht, können Sie einen Hash-Satz gültiger Zeichen vorberechnen und so etwas tun 

if (validCharHashSet.contains(symbol))...
6
Alvin

Wenn Sie bestimmte Zeichen haben, sollten:

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           
3
smas

Es könnte klarer als Wechselanweisung geschrieben werden, z.

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

Verwenden von Guave :

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

Oder wenn es sich bei vielen dieser Zeichen um einen Bereich handelt, z. B. "A" bis "U".

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

Sie können dies auch als static final-Feld deklarieren, damit der Matcher nicht jedes Mal erstellt werden muss.

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

Option 2 wird funktionieren. Sie können auch einen Set<Character> oder verwenden

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

sie können dies verwenden:

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

beachten Sie, dass Sie keinen separaten String mit den Buchstaben A-Z erstellen müssen. 

1
Daniel He

Eine Möglichkeit, einen List<Character> zu verwenden, der mit überladenen Convenience-Factory-Methoden in Java9 erstellt wurde, ist wie folgt:

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

Sie können Ihre Zeichen einfach als Strings schreiben und die Equals-Methode verwenden.

Zum Beispiel:

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);
    }
0
Anony

Ja, Sie müssen es wie Ihre zweite Zeile schreiben. Java verfügt nicht über den syntaktischen Zucker im Python-Stil Ihrer ersten Zeile.

Alternativ können Sie Ihre gültigen Werte in ein Array einfügen und prüfen, ob symbol im Array vorhanden ist.

0
Endophage

pseudocode, da ich keine Java-SDK bei mir habe:

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

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