webentwicklung-frage-antwort-db.com.de

Wie überprüfe ich, ob ein Zeichen einem leeren Feld entspricht?

Folgendes habe ich:

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (Equals(c," "))
    }
}

Dieser Code besagt jedoch, dass Symbol für diese Methode nicht gefunden werden kann. Ich erinnere mich, Java mit einem Vergleicher wie diesem ... Irgendwelche Vorschläge?

92
delete
if (c == ' ')

char ist ein primitiver Datentyp und kann daher mit == verglichen werden.

Wenn Sie doppelte Anführungszeichen verwenden, erstellen Sie eine String-Konstante (" "), Während es sich bei einfachen Anführungszeichen um eine char-Konstante (' ') Handelt.

195
Nikita Rybak

Der Code, den Sie benötigen, hängt davon ab, was Sie unter "einem leeren Raum" verstehen.

  • Wenn Sie das ASCII/Latin-1/Unicode-Leerzeichen (0x20) aka SP meinen, dann:

    if (ch == ' ') {
        // ...
    }
    
  • Wenn Sie eines der traditionellen ASCII Whitespace-Zeichen (SP, HT, VT, CR, NL) meinen, dann:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
    
  • Wenn Sie ein Unicode-Leerzeichen meinen, dann:

    if (Character.isWhitespace(ch)) {
        // ...
    }
    

Beachten Sie, dass Unicode-Leerzeichen enthalten sind zusätzlich ASCII Steuercodes, und einige andere Unicode-Zeichen in höheren Codeebenen; Siehe Javadoc für Character.isWhitespace(char) .


Was Sie geschrieben haben, war Folgendes:

    if (Equals(ch, " ")) {
        // ...
    }

Dies ist auf mehreren Ebenen falsch. Erstens ist die Art und Weise, wie der Java) - Compiler versucht, dies als Aufruf einer Methode mit der Signatur boolean Equals(char, String) zu interpretieren.

  • Dies ist falsch, da keine Methode vorhanden ist, wie der Compiler in der Fehlermeldung meldet.
  • Equals wäre normalerweise sowieso nicht der Name einer Methode. Die Java Konvention ist, dass Methodennamen mit einem Kleinbuchstaben beginnen.
  • Ihr Code (wie geschrieben) hat versucht, ein Zeichen und einen String zu vergleichen, aber char und String sind nicht vergleichbar und können nicht in einen gemeinsamen Basistyp umgewandelt werden.

Es gibt so etwas wie einen Komparator in Java, aber es ist eine Schnittstelle, keine Methode, und sie wird folgendermaßen deklariert:

    public interface Comparator<T> {
        public int compare(T v1, T v2);
    }

Mit anderen Worten, der Methodenname lautet compare (nicht Equals), es wird eine Ganzzahl (kein Boolescher Wert) zurückgegeben und es werden zwei Werte verglichen, die zu dem vom Typ angegebenen Typ heraufgestuft werden können Parameter.


Jemand (in einer gelöschten Antwort!) Sagte, dass er dies versucht hat:

    if (c == " ")

Das scheitert aus zwei Gründen:

  • " " Ist ein String-Literal und kein Zeichen-Literal, und Java erlaubt keinen direkten Vergleich von String- und char-Werten.

  • Sie sollten niemals Strings oder String-Literale mit == Vergleichen. Der Operator == Für einen Referenztyp vergleicht die Objektidentität und nicht den Objektwert. Im Fall von String ist es üblich, unterschiedliche Objekte mit unterschiedlicher Identität und demselben Wert zu haben. Ein == - Test gibt häufig die falsche Antwort ... aus der Perspektive dessen, was Sie hier versuchen.

83
Stephen C

Du könntest benutzen

Character.isWhitespace(c)

oder eine der anderen verfügbaren Methoden in der Character-Klasse.

  if (c == ' ')

funktioniert auch.

19
Corv1nus

Da char ein primitiver Typ ist, können Sie einfach c == ' ' Schreiben.
Sie müssen equals() nur für Referenztypen wie String oder Character aufrufen.

18
SLaks

Mein Vorschlag wäre:

if (c == ' ')
11
MartinStettner

Zum Vergleichen der Charaktere benutzt du das == Operator:

if (c == ' ')
10
codaddict

Character.isSpaceChar(c) || Character.isWhitespace(c) hat für mich gearbeitet.

3
vbevans94

In diesem Fall denken Sie an die String-Vergleichsfunktion "String".equals("some_text"). Zeichen müssen diese Funktion nicht verwenden. Stattdessen ein Standard == Vergleichsoperator wird ausreichen.

private static int countNumChars(String s) {
    for(char c : s.toCharArray()){
        if (c == ' ') // your resulting outcome
    }
}
3
user372743

Du kannst es versuchen:

if(Character.isSpaceChar(ch))
{
    // Do something...
}

Oder:

if((int) ch) == 32)
{
    // Do something...
}
2
A-Sharabiani

Auf den ersten Blick wird Ihr Code nicht kompiliert. Da die geschachtelte if-Anweisung keine geschweiften Klammern enthält, wird in der nächsten Zeile der Code berücksichtigt, den sie ausführen soll. Außerdem vergleichen Sie ein Zeichen mit einem String "". Versuchen Sie stattdessen, die Werte als Zeichen zu vergleichen. Ich denke, die richtige Syntax wäre:

if(c == ' '){
   //do something here
}

Aber andererseits bin ich nicht vertraut mit dem "Equal" Klasse

2
bakoyaro