2011-09-12 5 views
2

Comment puis-je compter les mots d'une phrase donnée en tant que chaîne? Nous sommes autorisés à utiliser uniquement les éléments suivants: for boucles, if statemant, while, charAt, length().Nombre de mots sur Java

J'ai écrit ce code:

public static int getWordCount() 
{ 
    String data = "bla bla bla bla"; 
    int Count = 0; 
    for (int i=0; i<data.length(); i++) 
    { 
    if (data.charAt(i) != ' ') 
    Count ++; 
    } 
    return Count; 
} 

Mais il ne compte que les lettres et non pas les mots.

+3

Vous spécifiquement ignores espaces avec '= ' « '! . Peut-être que vous devriez seulement inclure des espaces avec '== ''' –

+3

des variables comme 'count' devraient être dans camelCase. –

Répondre

9

Voici une suggestion: Comptez le nombre de ' ' et ajoutez 1?

Exemple:

"bla bla bla bla" 
    1 2 3  : 3 + 1 = 4 

"hello" 
        : 0 + 1 = 1 

Si vous voulez obtenir la fantaisie, vous pouvez garder une variable booléenne nommée quelque chose comme lastWasSpace, mis à true lors de l'exécution dans un espace, la mise à false lorsque vous exécutez dans un caractère non-espace. Si vous incrémentez seulement le Count alors que lastWasSpace est faux, vous pourrez également gérer des chaînes avec plusieurs espaces consécutifs.

   "bla bla  bla" 
       1  2    : 2 + 1 = 3 
lastWasSpace: FFFFTTTFFFFTTTTTFFFF 
+2

Que se passe-t-il s'il y a deux mots séparés par plusieurs espaces? – Drahakar

+2

Mis à jour ma réponse à cet égard. – aioobe

+0

@Drahakar droits .. parce qu'ils ont écrit sur la question que nous devons prendre en considération que peut-être sont séparés par plusieurs (ou plusieurs) espaces – Oshrib

2

le code donné compterait en effet les lettres et non les mots. Vous voudrez peut-être changer la condition:

if (data.charAt(i) == ' ') 

cela signifie, si vous trouvez un espace, cela marquera le début du mot suivant. En outre, le dernier mot ne sera pas compté, donc vous devriez retourner Count+1 au lieu de Count.

Il y a plusieurs hypothèses que j'ai fait ici:

  1. Il y aura exactement un espace entre les mots.
  2. Il n'y aura pas d'espaces avant ou arrière.

Examiner plusieurs espaces entre les mots, vous devez modifier le code un peu. Au lieu de vérifier si un caractère est un espace, vérifiez si un caractère est un espace et si le caractère précédent était un espace ou pas de caractère pour le cas du premier mot. Cela permettrait également de gérer les espaces de début et de fin.

1
String ss = " leading spaces in string "; 
String[] sa = ss.trim().split("\\w+"); 
System.out.println(sa.length); 

Notez l'utilisation de trim pour gérer les espaces environnants.

+0

Nice, mais nous ne pouvons pas utiliser split. Merci quand même ! J'ai appris quelque chose :) – Oshrib

+0

Plus tard, l'OP aura des cas spéciaux comme la gestion des points, des virgules et d'autres caractères spéciaux. Utiliser Regex est la voie à suivre. +1 – medopal

+1

"ne peut pas utiliser split" partie était moins évident de la question :-). – Santosh

0

Utilisez le code ci-dessous pour compter les mots de la ligne,

  int index = 0; 
      int numWords =0; 
      boolean prevwhitespace = true; 
      String line = "bla bla bla bla"; 
      while(index < line.length()) 
      { 
       char c = line.charAt(index++); 
       boolean currwhitespace = Character.isWhitespace(c); 
       if(prevwhitespace && !currwhitespace) 
       { 
        numWords++; 
       } 
       prevwhitespace= currwhitespace; 
      } 
      System.out.println("no. of words in the line :: " +numWords); 
1
public class Main { 

    public static void main(String[] args) { 
     String data = "This is a Test"; 
     int wordCount = 1; 
     int charCount = 0; 
     for (int i = 0; i < data.length(); i++) { 
      if (data.charAt(i) == ' ') { 
       wordCount++; 
      } else { 
       charCount++; 

      } 
     } 
     System.out.println("wordCount = " + wordCount); 
     System.out.println("charCount = " + charCount); 
    } 
} 
0

Ma solution:

public static int getWordCount() { 
    String data = "bla bla bla bla"; 
    String[] arr = data.split(" "); 
    return arr.length; 
} 
-2
String str = " Hello there my name  is Bill "; 
str = str.trim(); 
int count = 0; 
for(int i = 0; i<str.length(); i++) { 
    if(str.charAt(i) == ' ' && str.charAt(i-1) != ' ') { 
     count++; 
    } 
} 

System.out.println(count+1); 
+3

Bienvenue sur SO! Pourriez-vous s'il vous plaît expliquer votre code? Merci de contribuer! – PatJ