web-dev-qa-db-de.com

Wörter in einer Stringmethode zählen?

Ich habe mich gefragt, wie ich eine Methode schreiben würde, um die Anzahl der Wörter in einer Java-Zeichenfolge nur mithilfe von Zeichenfolgenmethoden wie charAt, length oder substring zu zählen.

Schleifen und ob Aussagen in Ordnung sind!

Ich freue mich über jede Hilfe, die ich bekommen kann! Vielen Dank!

25
Philip McQuitty
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;
}
23
koool

Dies funktioniert auch mit mehreren Leerzeichen sowie führenden und/oder nachfolgenden Leerzeichen und Leerzeilen:

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

Hoffentlich hilft das. Mehr Infos zu split hier.

66
Cory G.

Hallo, ich habe es gerade mit StringTokenizer so herausgefunden:

String words = "Word word2 Word3 Word4";
StringTokenizer st = new Tokenizer(words);
st.countTokens();

Einfach verwenden, 

str.split("\\w+").length ;
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
whiteErru
 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

Es gibt eine einfache Lösung, mit der Sie diesen Code ausprobieren können 

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

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

    System.out.println("count is = "+(words.length));
0
Abhishek Verma
    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
Ran Adler

Meine Vorstellung von diesem Programm ist:

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
Misq

Ausgehend von der gewählten Antwort werden im Folgenden einige Probleme in englischer Sprache behandelt, darunter Wörter mit Bindestrich, Apostrophe für Possessiv- und Kürzel, Zahlen sowie beliebige Zeichen außerhalb von 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
Dave Bower
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
RE350

Ich bin neu bei stackoverflow, aber ich hoffe, mein Code hilft:

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
Soorena

Eine Zeichenfolge besteht normalerweise aus durch Leerzeichen getrennten Wörtern. Nun, Sie können die Phrase mit den Leerzeichen als Trennzeichen aufteilen und wie folgt zählen.

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
AlketCecaj

import Java.util.; import Java.io. ;

öffentliche Klasse 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
hassan

Algo in 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
Saad
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
Ashish M Jain

Benutzen 

myString.split("\\s+");

Das wird funktionieren.

0
Deepak

Wörter in einem String zählen:
Das könnte auch helfen ->

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
taj.tajinder

Ich habe das gerade zusammengestellt. Der Inkrementierer in der wordCount () -Methode ist für mich etwas unerheblich, funktioniert aber. 

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
Geoff Zoref