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

104

Voici ce que j'ai:

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

Mais ce code indique 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?

Jonik
la source
2
espace vide - un ' 'sans contenu?
Andreas Dolk

Réponses:

213
if (c == ' ')

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

De plus, en utilisant des guillemets doubles, vous créez une Stringconstante ( " "), tandis qu'avec des guillemets simples, c'est une charconstante ( ' ').

Nikita Rybak
la source
87

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).

  • Ceci est incorrect car aucune méthode n'existe, comme le compilateur l'a signalé dans le message d'erreur.
  • Equalsne 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.
  • Votre code (tel qu'il est écrit) essayait de comparer un caractère et une chaîne, mais charet Stringne 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 Stringet 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, Stringil 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.

Stephen C
la source
20

Vous pourriez utiliser

Character.isWhitespace(c)

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

  if (c == ' ')

fonctionne également.

Corv1nus
la source
Eh bien, cela dépend en fin de compte s'il vérifie uniquement les espaces. Je veux dire que s'il contient un onglet, vous obtiendrez un faux positif.
Actualisé. Il peut faire ce dont il a besoin directement de Character, bien que ce soit exagéré.
Corv1nus
18

Puisqu'il chars'agit d'un type primitif, vous pouvez simplement écrire c == ' '.
Il vous suffit d'appeler equals()des types de référence comme Stringou Character.

SLaks
la source
12

Ma suggestion serait:

if (c == ' ')
MartinStettner
la source
11

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

if (c == ' ')
codaddict
la source
5

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

vbevans94
la source
4

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

la source
3

À 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

Bakoyaro
la source
3

Tu peux essayer:

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

Ou:

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

Pour comparer, Stringsvous devez utiliser le mot clé equals .

if(c.equals(""))
{
}
Adnan B.
la source
1) Cette question concerne la comparaison de caractères et non de chaînes. 2) Il n'y a pas de equalsmot-clé en Java. C'est un identifiant. 3) Puisqu'il cs'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 charvaleur à laquelle correspond "". Ce dernier signifie une chaîne avec «aucun caractère». Cela ne peut pas correspondre à un personnage.
Stephen C
La clé pour répondre à cette question est de trouver une signification pour «espace vide» qui a une sorte de sens dans le contexte.
Stephen C