Réponses:
if (c == ' ')
char
est un type de données primitif, il peut donc être comparé à ==
.
De plus, en utilisant des guillemets doubles, vous créez une String
constante ( " "
), tandis qu'avec des guillemets simples, c'est une char
constante ( ' '
).
Le code dont vous avez besoin dépend de ce que vous entendez par «un espace vide».
Si vous voulez dire le caractère d'espace ASCII / Latin-1 / Unicode (0x20) aka SP, alors:
if (ch == ' ') {
// ...
}
Si vous voulez dire l'un des caractères d'espacement ASCII traditionnels (SP, HT, VT, CR, NL), alors:
if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
// ...
}
Si vous voulez dire un espace blanc Unicode, alors:
if (Character.isWhitespace(ch)) {
// ...
}
Notez qu'il existe des espaces blancs Unicode comprenant des codes de contrôle ASCII supplémentaires et certains autres caractères Unicode dans des plans de code supérieurs; voir le javadoc pour Character.isWhitespace(char)
.
Voici ce que vous avez écrit:
if (Equals(ch, " ")) {
// ...
}
C'est faux à plusieurs niveaux. Premièrement, la façon dont le compilateur Java essaie d'interpréter cela est comme un appel à une méthode avec une signature de boolean Equals(char, String)
.
Equals
ne serait pas normalement le nom d'une méthode de toute façon. La convention Java est que les noms de méthode commencent par une lettre minuscule.char
et String
ne sont pas comparables et ne peuvent pas être convertis en un type de base commun.Il existe un comparateur en Java, mais c'est une interface pas une méthode, et il est déclaré comme ceci:
public interface Comparator<T> {
public int compare(T v1, T v2);
}
En d'autres termes, le nom de la méthode est compare
(non Equals
), il renvoie un entier (pas un booléen) et il compare deux valeurs qui peuvent être promues au type donné par le paramètre type.
Quelqu'un (dans une réponse supprimée!) A dit avoir essayé ceci:
if (c == " ")
Cela échoue pour deux raisons:
" "
est un littéral de chaîne et non un littéral de caractère, et Java ne permet pas la comparaison directe des valeurs String
et char
.
Vous ne devez JAMAIS comparer des chaînes ou des littéraux de chaîne en utilisant ==
. L' ==
opérateur sur un type de référence compare l'identité de l'objet, pas la valeur de l'objet. Dans ce cas, String
il est courant d'avoir des objets différents avec une identité différente et la même valeur. Un ==
test donnera souvent la mauvaise réponse ... du point de vue de ce que vous essayez de faire ici.
Vous pourriez utiliser
Character.isWhitespace(c)
ou l'une des autres méthodes disponibles dans la classe Character.
if (c == ' ')
fonctionne également.
Ma suggestion serait:
if (c == ' ')
Dans ce cas, vous pensez à la fonction de comparaison de chaînes "String".equals("some_text")
. Les caractères n'ont pas besoin d'utiliser cette fonction. Au lieu de cela, un ==
opérateur de comparaison standard suffira.
private static int countNumChars(String s) {
for(char c : s.toCharArray()){
if (c == ' ') // your resulting outcome
}
}
À première vue, votre code ne se compilera pas. Étant donné que l'instruction if imbriquée n'a pas d'accolades, elle considérera la ligne suivante comme le code qu'elle doit exécuter. De plus, vous comparez un caractère à une chaîne "". Essayez plutôt de comparer les valeurs sous forme de caractères. Je pense que la syntaxe correcte serait:
if(c == ' '){
//do something here
}
Mais là encore, je ne connais pas la "Equal"
classe
Tu peux essayer:
if(Character.isSpaceChar(ch))
{
// Do something...
}
Ou:
if((int) ch) == 32)
{
// Do something...
}
Pour comparer, Strings
vous devez utiliser le mot clé equals .
if(c.equals(""))
{
}
equals
mot-clé en Java. C'est un identifiant. 3) Puisqu'il c
s'agit d'un char
(type primitif !!), vous ne pouvez pas appeler c.equals(...)
. 4) Même si vous le pouviez, il n'y a aucune char
valeur à laquelle correspond ""
. Ce dernier signifie une chaîne avec «aucun caractère». Cela ne peut pas correspondre à un personnage.
' '
sans contenu?