117 votes

Comment vérifier si un caractère est égal à un espace vide ?

Voilà ce que j'ai :

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

Mais ce code dit qu'il ne peut pas trouver de symbole pour cette méthode. Je me souviens que Java avait un comparateur comme celui-ci... Des suggestions ?

238voto

Nikita Rybak Points 36641
if (c == ' ')

char est un type de données primitif, il peut donc être comparé à == .

De plus, en utilisant des guillemets, vous créez String constante ( " " ), alors qu'avec des guillemets simples, c'est un char constante ( ' ' ).

91voto

Stephen C Points 255558

Le code dont vous avez besoin dépend de ce que vous entendez par "un espace vide".

  • Si vous voulez parler du caractère d'espace ASCII / Latin-1 / Unicode (0x20) alias SP, alors.. :

    if (ch == ' ') {
        // ...
    }
  • Si vous voulez parler de 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 tout caractère d'espacement Unicode, alors :

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

Notez qu'il y a des inclusions d'espaces blancs Unicode supplémentaire Codes de contrôle ASCII, y certains autres caractères Unicode dans des plans de code plus élevés ; voir la javadoc de Character.isWhitespace(char) .


Ce que vous avez écrit est ceci :

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

C'est faux à bien des égards. Premièrement, la façon dont le compilateur Java essaie d'interpréter cela est un appel à une méthode dont la signature est boolean Equals(char, String) .

  • C'est faux car aucune méthode n'existe, comme le compilateur l'a signalé dans le message d'erreur.
  • Equals ne serait normalement pas le nom d'une méthode de toute façon. La convention Java veut que les noms de méthodes commencent par une lettre minuscule.
  • Votre code (tel qu'il est écrit) essayait de comparer un caractère et une chaîne de caractères, mais char y String ne sont pas comparables et ne peuvent pas être coulés dans un type de base commun.

Il existe un comparateur en Java, mais c'est une interface et non 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 (pas Equals ), elle renvoie un entier (et non un booléen), et elle 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 qu'il avait essayé ceci :

    if (c == " ")

Cela échoue pour deux raisons :

  • " " est un littéral de type String et non un littéral de type caractère, et Java ne permet pas la comparaison directe de String y char valeurs.

  • Vous ne devez JAMAIS comparer des chaînes de caractères ou des littéraux de chaînes de caractères à l'aide de la fonction == . Le site == sur un type de référence compare l'identité de l'objet, et non sa valeur. Dans le cas de String il est courant d'avoir différents objets ayant une identité différente et la même valeur. Un site == le test sera donnent souvent une mauvaise réponse ... du point de vue de ce que vous essayez de faire ici.

20voto

Corv1nus Points 1884

Vous pourriez utiliser

Character.isWhitespace(c)

ou toute autre méthode disponible dans la classe Character.

  if (c == ' ')

fonctionne également.

18voto

SLaks Points 391154

Desde char est un type primitif, vous pouvez simplement écrire c == ' ' .
Il vous suffit d'appeler equals() pour les types de référence comme String o Character .

12voto

MartinStettner Points 14514

Ma suggestion serait :

if (c == ' ')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X