2010-12-22 2 views
79

Voici ce que j'ai:Comment vérifier si un caractère est égal à un espace vide?

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

Mais ce code dit qu'il ne peut pas trouver Symbole pour cette méthode. Je me souviens de Java ayant un comparateur comme ça ... Des suggestions?

+2

* espace vide * - un '' '' sans contenu? –

Répondre

170
if (c == ' ') 

char est un type de données primitive, de sorte qu'il peut être comparé avec ==.

En outre, en utilisant des guillemets doubles vous créez String constante (" "), alors qu'avec des guillemets simples, il est une constante char (' ').

11

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

if (c == ' ') 
19

Depuis char est un type primitif, vous pouvez simplement écrire c == ' '.
Vous avez seulement besoin d'appeler equals() pour les types de référence comme String ou Character.

3

Dans ce cas, vous envisagez de la chaîne comparant la fonction "String".equals("some_text"). Les personnages 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 
    } 
} 
19

Vous pouvez utiliser

Character.isWhitespace(c) 

ou l'une des autres méthodes disponibles dans la classe de caractères.

if (c == ' ') 

fonctionne également.

+0

Eh bien, cela dépend finalement s'il vérifie seulement les espaces. Je veux dire si elle contient un onglet, vous obtiendrez un faux positif. –

+0

Mis à jour. Il peut faire ce dont il a besoin directement de Caractère, bien que ce soit trop. – Corv1nus

3

À première vue, votre code ne sera pas compilé. Puisque l'instruction imbriquée if n'a aucune accolade, elle considérera la ligne suivante comme le code qu'elle doit exécuter. En outre, vous comparez un char contre une chaîne, "". Essayez de comparer les valeurs en tant que caractères à la place. Je pense que la syntaxe correcte serait:

if(c == ' '){ 
    //do something here 
} 

Mais là encore, je ne suis pas familier avec la classe "Equal"

75

Le code a besoin dépend de ce que vous entendez par « un espace vide ».

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

    if (ch == ' ') { 
        // ... 
    } 
    
  • Si vous voulez dire l'un des caractères blancs traditionnels ASCII (SP, HT , VT, CR, NL), puis:

    if (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' || ch == '\x0b') { 
        // ... 
    } 
    
  • Si vous voulez dire un caractère Unicode des espaces, puis:

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

Notez qu'il existe des espaces Unicode comprend supplémentaires codes de contrôle ASCII, et d'autres caractères Unicode dans des plans de code supérieur; voir le javadoc pour Character.isWhitespace(char).


Qu'est-ce que vous avez écrit était le suivant:

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

Ceci est faux sur 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 indiqué 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 (comme écrit) essayait de comparer un caractère et une chaîne, mais char et String ne sont pas comparables et ne peuvent pas être converties en un type de base commun.

Il y a une telle chose comme un Comparator en Java, mais il est une interface pas une méthode, et elle est déclarée 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), il renvoie un entier (pas un booléen), et il compare deux valeurs qui peuvent être promus au type donné par le paramètre de type.


Quelqu'un (! Dans supprimé réponse) a dit qu'ils ont essayé ceci:

if (c == " ") 

qui échoue pour deux raisons:

  • " " est une chaîne littérale et non un caractère littéral , et Java ne permet pas la comparaison directe des valeurs String et char.

  • Vous ne devez JAMAIS comparer des chaînes de caractères ou des chaînes de caractères à l'aide de ==. L'opérateur == sur un type de référence compare l'identité de l'objet, pas la valeur de l'objet.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 ==donnera souvent la mauvaise réponse ... du point de vue de ce que vous essayez de faire ici.

+0

Je n'ai pas vu le comparateur en Java, quelle est la différence avec Comparable avec la méthode compareTo? –

+0

@Fixix, vous pouvez utiliser l'interface Comparator comme argument supplémentaire de Collections.sort pour fournir d'autres moyens de tri d'une liste d'un certain type. Après tout, un objet Comparable ne peut avoir que la méthode/one/compareTo, donc si vous voulez trier une liste d'éléments par différents moyens, vous devrez utiliser l'interface Comparator. – fwielstra

-3

Pour comparer Strings vous devez utiliser le mot-clé égal.

if(c.equals("")) 
{ 
} 
+0

1) Cette question concerne la comparaison de caractères, pas de chaînes. 2) Il n'y a pas de mot-clé 'equals' en Java. C'est un identifiant. 3) Puisque 'c' est un' char' (type primitif !!), vous ne pouvez pas appeler 'c.equals (...)'. 4) Même si vous le pouvez, il n'y a pas de valeur 'char' qui correspond à' "" '. Ce dernier signifie une chaîne avec "aucun caractère". Cela ne peut pas correspondre à un personnage. –

+0

La clé pour répondre à cette Question est de trouver un sens pour "espace vide" qui fait sens dans le contexte. –

1

Vous pouvez essayer:

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

Ou:

if((int) ch) == 32) 
{ 
    // Do something... 
} 
1

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

Questions connexes