Come verificare se un carattere è uguale a uno spazio vuoto?


104

Ecco cosa ho:

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

Ma quel codice dice che non riesce a trovare il simbolo per quel metodo. Ricordo che Java aveva un comparatore come questo ... Qualche suggerimento?


2
spazio vuoto - un ' 'senza contenuto?
Andreas Dolk

Risposte:


213
if (c == ' ')

charè un tipo di dati primitivo, quindi può essere confrontato con ==.

Inoltre, utilizzando le virgolette doppie si crea una Stringcostante ( " "), mentre con le virgolette singole è una charcostante ( ' ').


87

Il codice di cui hai bisogno dipende da cosa intendi per "uno spazio vuoto".

  • Se intendi il carattere di spazio ASCII / Latin-1 / Unicode (0x20) aka SP, allora:

    if (ch == ' ') {
        // ...
    }
  • Se intendi uno qualsiasi dei tradizionali caratteri ASCII (SP, HT, VT, CR, NL), allora:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
  • Se intendi uno spazio vuoto Unicode, allora:

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

Notare che ci sono spazi bianchi Unicode che includono codici di controllo ASCII aggiuntivi e alcuni altri caratteri Unicode nei piani di codice superiori; vedere il javadoc per Character.isWhitespace(char).


Quello che hai scritto era questo:

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

Questo è sbagliato su diversi livelli. In primo luogo, il modo in cui il compilatore Java cerca di interpretarlo è come una chiamata a un metodo con una firma di boolean Equals(char, String).

  • Questo è sbagliato perché non esiste alcun metodo, come segnalato dal compilatore nel messaggio di errore.
  • Equalscomunque normalmente non sarebbe il nome di un metodo. La convenzione Java è che i nomi dei metodi iniziano con una lettera minuscola.
  • Il codice (come scritto) stava cercando di confrontare un carattere e una stringa, ma chare Stringnon sono confrontabili e non possono essere convertiti in un tipo di base comune.

Esiste un comparatore in Java, ma è un'interfaccia non un metodo, ed è dichiarato così:

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

In altre parole, il nome del metodo è compare(not Equals), restituisce un numero intero (non un booleano) e confronta due valori che possono essere promossi al tipo fornito dal parametro type.


Qualcuno (in una risposta cancellata!) Ha detto di aver provato questo:

    if (c == " ")

Ciò fallisce per due motivi:

  • " "è un letterale String e non un letterale carattere e Java non consente il confronto diretto di Stringe charvalori.

  • Non dovresti MAI confrontare stringhe o stringhe letterali usando ==. L' ==operatore su un tipo di riferimento confronta l'identità dell'oggetto, non il valore dell'oggetto. In questo caso Stringè comune avere oggetti diversi con identità diversa e lo stesso valore. Un ==test spesso darà la risposta sbagliata ... dal punto di vista di ciò che stai cercando di fare qui.


20

Potresti usare

Character.isWhitespace(c)

o uno degli altri metodi disponibili nella classe Character.

  if (c == ' ')

funziona anche.


Alla fine, dipende se sta controllando solo gli spazi. Voglio dire, se contiene una scheda, otterrai un falso positivo.

Aggiornato. Può fare ciò di cui ha bisogno direttamente da Character, anche se è eccessivo.
Corv1nus

18

Poiché charè un tipo primitivo, puoi semplicemente scrivere c == ' '.
Hai solo bisogno di chiamare equals()per tipi di riferimento come Stringo Character.



11

Per confrontare il carattere si utilizza l' ==operatore:

if (c == ' ')

5

Character.isSpaceChar(c) || Character.isWhitespace(c) ha funzionato per me.


4

In questo caso, stai pensando alla funzione di confronto delle stringhe "String".equals("some_text"). I caratteri non hanno bisogno di usare questa funzione. Invece ==sarà sufficiente un operatore di confronto standard .

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

3

A prima vista, il codice non verrà compilato. Poiché l'istruzione if annidata non ha parentesi graffe, considererà la riga successiva il codice che dovrebbe eseguire. Inoltre, stai confrontando un carattere con una stringa, "". Prova invece a confrontare i valori come caratteri. Penso che la sintassi corretta sarebbe:

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

Ma poi di nuovo, non ho familiarità con la "Equal"classe


3

Puoi provare:

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

O:

if((int) ch) == 32)
{
    // Do something...
}

-5

Per confrontare Stringsdevi usare la parola chiave uguale .

if(c.equals(""))
{
}

1) Questa domanda riguarda il confronto dei caratteri, non le stringhe. 2) Non ci sono equalsparole chiave in Java. È un identificatore. 3) Poiché cè un char(tipo primitivo !!), non puoi chiamare c.equals(...). 4) Anche se potessi, non ci sono charvalori a cui si associa "". Quest'ultimo significa una stringa "senza caratteri". Non può corrispondere a un personaggio.
Stephen C

La chiave per rispondere a questa domanda è trovare un significato per "spazio vuoto" che abbia un qualche senso nel contesto.
Stephen C
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.