web-dev-qa-db-fra.com

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

Voici 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 Symbol pour cette méthode. Je me souviens de Java avoir un comparateur comme celui-ci ... Des suggestions?

92
delete
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 String constante (" "), tandis que pour les guillemets simples, il s'agit d'une char constante (' ').

195
Nikita Rybak

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) ou SP, alors:

    if (ch == ' ') {
        // ...
    }
    
  • Si vous parlez des caractères d'espacement traditionnels ASCII (SP, HT, VT, CR, NL), alors:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') {
        // ...
    }
    
  • Si vous voulez parler de tout caractère Unicode, alors:

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

Notez qu’il existe des espaces Unicode qui incluent des codes de contrôle supplémentaires ASCII, et d’autres caractères Unicode dans un code plus élevé. Avions; voir le javadoc pour Character.isWhitespace(char) .


Voici ce que vous avez écrit:

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

Ceci est faux à plusieurs niveaux. Premièrement, le compilateur Java essaie d'interpréter cela comme un appel à une méthode avec une signature de boolean Equals(char, String).

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

Un comparateur existe en Java, mais il s’agit d’une interface et non d’une méthode, et elle est déclarée comme suit:

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

En d'autres termes, le nom de la méthode est compare (et non Equals), il renvoie un entier (pas un booléen) et compare deux valeurs pouvant ê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 String et non un caractère, et Java ne permet pas la comparaison directe des valeurs String et char.

  • Vous ne devez JAMAIS comparer les chaînes ou les littéraux de chaîne avec ==. L'opérateur == 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 avec une identité différente et la même valeur. Un test de == donnera souvent la mauvaise réponse ... du point de vue de ce que vous essayez de faire ici.

83
Stephen C

Vous pourriez utiliser

Character.isWhitespace(c)

ou l'une des autres méthodes disponibles dans la classe Character.

  if (c == ' ')

fonctionne aussi.

19
Corv1nus

Puisque char est un type primitif, vous pouvez simplement écrire c == ' '.
Vous devez uniquement appeler equals() pour les types de référence tels que String ou Character.

18
SLaks

Ma suggestion serait:

if (c == ' ')
11
MartinStettner

Pour comparer un caractère, utilisez l'opérateur ==:

if (c == ' ')
10
codaddict

Character.isSpaceChar(c) || Character.isWhitespace(c) a travaillé pour moi.

3
vbevans94

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
    }
}
3
user372743

Tu peux essayer:

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

Ou:

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

À première vue, votre code ne sera pas compilé. Puisque l’instruction if imbriquée n’a pas d’accolades, la ligne suivante sera considérée comme le code à exécuter. En outre, 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 suis pas familier avec la classe "Equal"

2
bakoyaro