Risposte:
if (c == ' ')
char
è un tipo di dati primitivo, quindi può essere confrontato con ==
.
Inoltre, utilizzando le virgolette doppie si crea una String
costante ( " "
), mentre con le virgolette singole è una char
costante ( ' '
).
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)
.
Equals
comunque normalmente non sarebbe il nome di un metodo. La convenzione Java è che i nomi dei metodi iniziano con una lettera minuscola.char
e String
non 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 String
e char
valori.
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.
Potresti usare
Character.isWhitespace(c)
o uno degli altri metodi disponibili nella classe Character.
if (c == ' ')
funziona anche.
Il mio suggerimento sarebbe:
if (c == ' ')
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
}
}
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
Puoi provare:
if(Character.isSpaceChar(ch))
{
// Do something...
}
O:
if((int) ch) == 32)
{
// Do something...
}
Per confrontare Strings
devi usare la parola chiave uguale .
if(c.equals(""))
{
}
equals
parole chiave in Java. È un identificatore. 3) Poiché c
è un char
(tipo primitivo !!), non puoi chiamare c.equals(...)
. 4) Anche se potessi, non ci sono char
valori a cui si associa ""
. Quest'ultimo significa una stringa "senza caratteri". Non può corrispondere a un personaggio.
' '
senza contenuto?