Compter les mots dans une méthode string?

je me demandais comment j'écrirais une méthode pour compter le nombre de mots dans une chaîne java uniquement en utilisant des méthodes de chaîne comme charAt, length, ou substring.

Boucles et si les déclarations sont d'accord!

j'ai vraiment apprécier l'aide que je peux obtenir! Merci!

24
demandé sur Trufa 2011-05-03 05:26:49
la source

20 ответов

public static int countWords(String s){

    int wordCount = 0;

    boolean word = false;
    int endOfLine = s.length() - 1;

    for (int i = 0; i < s.length(); i++) {
        // if the char is a letter, word = true.
        if (Character.isLetter(s.charAt(i)) && i != endOfLine) {
            word = true;
            // if char isn't a letter and there have been letters before,
            // counter goes up.
        } else if (!Character.isLetter(s.charAt(i)) && word) {
            wordCount++;
            word = false;
            // last word of String; if it doesn't end with a non letter, it
            // wouldn't count without this.
        } else if (Character.isLetter(s.charAt(i)) && i == endOfLine) {
            wordCount++;
        }
    }
    return wordCount;
}
22
répondu koool 2014-01-22 00:54:45
la source

cela fonctionnerait même avec des espaces multiples et des espaces de tête et / ou de fuite et des lignes vides:

String trim = s.trim();
if (trim.isEmpty())
    return 0;
return trim.split("\s+").length; // separate string around spaces

J'espère que ça aidera. Plus d'infos sur split ici.

64
répondu Cory G. 2017-05-19 04:22:37
la source

Salut je viens de comprendre avec StringTokenizer comme ceci:

String words = "word word2 word3 word4";
StringTokenizer st = new Tokenizer(words);
st.countTokens();
11
répondu fredy hernan sanchez montaa Ha 2015-03-09 19:27:04
la source

utilisez Simplement ,

str.split("\w+").length ;
5
répondu Ram Krishna Chaulagai 2015-02-09 17:32:40
la source
public static int countWords(String str){
        if(str == null || str.isEmpty())
            return 0;

        int count = 0;
        for(int e = 0; e < str.length(); e++){
            if(str.charAt(e) != ' '){
                count++;
                while(str.charAt(e) != ' ' && e < str.length()-1){
                    e++;
                }
            }
        }
        return count;
    }
2
répondu whiteErru 2013-04-30 22:40:40
la source
 private static int countWordsInSentence(String input) {
    int wordCount = 0;

    if (input.trim().equals("")) {
        return wordCount;
    }
    else {
        wordCount = 1;
    }

    for (int i = 0; i < input.length(); i++) {
        char ch = input.charAt(i);
        String str = new String("" + ch);
        if (i+1 != input.length() && str.equals(" ") && !(""+ input.charAt(i+1)).equals(" ")) {
            wordCount++;
        }
    }

    return wordCount;
 }
1
répondu Arvind Krishnakumar 2012-08-24 02:17:40
la source

Algo en O(N)

 count : 0;

 if(str[0] == validChar ) :
      count++;
 else :
      for i = 1 ; i < sizeOf(str) ; i++ :

          if(str[i] == validChar AND str[i-1] != validChar)

             count++;

          end if;

      end for;

 end if;

 return count;
0
répondu Saad 2012-11-09 13:40:40
la source
    import com.google.common.base.Optional;
    import com.google.common.base.Splitter;
    import com.google.common.collect.HashMultiset;
    import com.google.common.collect.ImmutableSet;
    import com.google.common.collect.Multiset;

    String str="Simple Java Word Count count Count Program";
    Iterable<String> words = Splitter.on(" ").trimResults().split(str);


    //google word counter       
    Multiset<String> wordsMultiset = HashMultiset.create();
    for (String string : words) {   
        wordsMultiset.add(string.toLowerCase());
    }

    Set<String> result = wordsMultiset.elementSet();
    for (String string : result) {
        System.out.println(string+" X "+wordsMultiset.count(string));
    }


add at the pom.xml
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>r09</version>
</dependency>
0
répondu Ran Adler 2013-06-19 17:29:04
la source

compter les mots dans une chaîne:

Cela pourrait aussi aider -->

package data.structure.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CountWords {

    public static void main(String[] args) throws IOException {
// Couting number of words in a string
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("enter Your String");
        String input = br.readLine(); 

        char[] arr = input.toCharArray();
        int i = 0;
    boolean notCounted = true;
    int counter = 0;
    while (i < arr.length) {
        if (arr[i] != ' ') {
            if (notCounted) {
                notCounted = false;
                counter++;
            }
        } else {
            notCounted = true;
        }
        i++;
    }
    System.out.println("words in the string are : " + counter);
}

}
0
répondu taj.tajinder 2014-10-26 03:19:07
la source

Utiliser

myString.split("\s+");

ça va marcher.

0
répondu Deepak 2015-02-03 10:56:05
la source
public class TestStringCount {

  public static void main(String[] args) {
    int count=0;
    boolean word= false;
    String str = "how ma ny wo rds are th ere in th is sente nce";
    char[] ch = str.toCharArray();
    for(int i =0;i<ch.length;i++){
        if(!(ch[i]==' ')){
            for(int j=i;j<ch.length;j++,i++){
                if(!(ch[j]==' ')){
                    word= true;
                    if(j==ch.length-1){
                        count++;
                    }
                    continue;
                }
                else{
                    if(word){
                        count++;
                    }
                    word = false;
                }
            }
        }
        else{
            continue;
        }
    }
    System.out.println("there are "+(count)+" words");      
    }
}
0
répondu RE350 2015-02-03 10:56:34
la source

import java.util.; importer java.io.;

public class Main {

public static void main(String[] args) {

    File f=new File("src/MyFrame.java");
    String value=null;
    int i=0;
    int j=0;
    int k=0;
try {
    Scanner  in =new Scanner(f);
    while(in.hasNextLine())
    {
    String a=in.nextLine();
    k++; 
    char chars[]=a.toCharArray();
    i +=chars.length;
    }
    in.close();
    Scanner in2=new Scanner(f);
    while(in2.hasNext())
            {

        String b=in2.next();
        System.out.println(b);
        j++;
            }
   in2.close();

    System.out.println("the number of chars is :"+i);
    System.out.println("the number of words is :"+j);
    System.out.println("the number of lines is :"+k);





}
catch (Exception e) {
    e.printStackTrace();

}


}

}

0
répondu hassan 2015-03-28 05:15:45
la source

Il y a une Solution Simple que vous pouvez essayer ce code

    String s = "hju   vg    jhdgsf  dh gg    g g  g  ";

    String[] words = s.trim().split("\s+");

    System.out.println("count is = "+(words.length));
0
répondu Abhishek Verma 2015-11-27 11:55:01
la source
public static int countWords(String input) {
        int wordCount = 0;
        boolean isBlankSet = false;
        input = input.trim();

        for (int j = 0; j < input.length(); j++) {
            if (input.charAt(j) == ' ')
                isBlankSet = true;
            else {
                if (isBlankSet) {
                    wordCount++;
                    isBlankSet = false;
                }
            }

        }

        return wordCount + 1;
    }
0
répondu Ashish M Jain 2016-02-05 14:12:35
la source

Mon idée de ce programme est que:

package text;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CoutingWords {

    public static void main(String[] args) throws IOException {
        String str;
        int cWords = 1;
        char ch;

        BufferedReader buffor = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Enter text: ");
        str = buffor.readLine();

        for(int i =0; i<str.length(); i++){
            ch = str.charAt(i);
            if(Character.isWhitespace(ch)){ cWords++; }
        }
        System.out.println("There are " + (int)cWords +" words.");
    }
}
0
répondu Misq 2016-02-07 22:45:52
la source

je suis nouveau à stackoverflow mais j'espère que mon code aidera:

private int numOfWordsInLineCounter(String line){

     int words = 0;

         for(int i = 1 ; i<line.length();i++){
         Character ch  = line.charAt(i-1);
         Character bch = line.charAt(i);
             if(Character.isLetterOrDigit(ch) == true && Character.isLetterOrDigit(bch)== false ) words++;
             if(i == line.length()-1 && Character.isLetterOrDigit(bch))words++;
         }
     return words;
 } 
0
répondu Soorena 2016-09-08 22:36:40
la source

une phrase de chaîne a normalement des mots séparés par l'espace. Eh bien, vous pouvez diviser la phrase en utilisant les espaces comme des caractères de séparation et les compter comme suit.

import java.util.HashMap;

import java.util.Map;

public class WordCountMethod {

    public static void main (String [] args){

        Map<String, Integer>m = new HashMap<String, Integer>();
        String phrase = "hello my name is John I repeat John";
        String [] array = phrase.split(" ");

        for(int i =0; i < array.length; i++){
            String word_i = array[i];
            Integer ci = m.get(word_i);
            if(ci == null){
                m.put(word_i, 1);
            }
            else m.put(word_i, ci+1);
        }

        for(String s : m.keySet()){
            System.out.println(s+" repeats "+m.get(s));
        }
    }

} 
0
répondu AlketCecaj 2017-08-04 05:28:43
la source

prenant la réponse choisie comme point de départ, ce qui suit traite de quelques questions de langue anglaise, y compris les mots avec un trait d'Union, les apostrophes pour possessives et raccourcis, les nombres et aussi tous les caractères en dehors de L'UTF-16:

public static int countWords(final String s) {
    int wordCount = 0;
    boolean word = false;
    final int endOfLine = s.length() - 1;

    for (int i = 0; i < s.length(); i++) {
        // if the char is a letter, word = true.
        if (isWordCharacter(s, i) && i != endOfLine) {
            word = true;
            // if char isn't a letter and there have been letters before,
            // counter goes up.
        } else if (!isWordCharacter(s, i) && word) {
            wordCount++;
            word = false;
            // last word of String; if it doesn't end with a non letter, it
            // wouldn't count without this.
        } else if (isWordCharacter(s, i) && i == endOfLine) {
            wordCount++;
        }
    }
    return wordCount;
}

private static boolean isWordCharacter(final String s, final int i) {
    final char ch = s.charAt(i);
    return Character.isLetterOrDigit(ch)
            || ch == '\''
            || Character.getType(ch) == Character.DASH_PUNCTUATION
            || Character.isSurrogate(ch);
}
0
répondu Dave Bower 2017-12-15 17:35:23
la source

j'ai juste assemblé ça. L'incrementer dans la méthode wordCount () est un peu inélégant pour moi, mais cela fonctionne.

import java.util.*;

public class WordCounter {

private String word;
private int numWords;

public int wordCount(String wrd) {
    StringTokenizer token = new StringTokenizer(wrd, " ");
    word = token.nextToken();
    numWords = token.countTokens();
    numWords++;

    return numWords;
}

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    String userWord;

    WordCounter wc = new WordCounter();

    System.out.println("Enter a sentence.");
    userWord = input.nextLine();

    wc.wordCount(userWord);

    System.out.println("You sentence was " + wc.numWords + " words long.");
  }
}
0
répondu Geoff Zoref 2018-06-11 19:54:44
la source
if(str.isEmpty() || str.trim().length() == 0){
   return 0;
}
return (str.trim().split("\s+").length);
-1
répondu Quick and dirty 2015-03-09 07:48:29
la source

Autres questions sur