Считать слова в строковом методе? - PullRequest
26 голосов
/ 03 мая 2011

Мне было интересно, как написать метод для подсчета количества слов в строке java, используя только строковые методы, такие как charAt, length или substring.

Циклы и если заявления в порядке!

Я действительно ценю любую помощь, которую могу получить! Спасибо!

Ответы [ 20 ]

68 голосов
/ 03 мая 2011

Это будет работать даже с несколькими пробелами, начальными и / или конечными пробелами и пустыми строками:

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

Надеюсь, это поможет.Подробнее о сплите здесь.

24 голосов
/ 03 мая 2011
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;
}
11 голосов
/ 09 марта 2015

Привет, я только что разобрался с StringTokenizer вот так:

String words = "word word2 word3 word4";
StringTokenizer st = new Tokenizer(words);
st.countTokens();
7 голосов
/ 09 февраля 2015

Просто используйте,

str.split("\\w+").length ;
2 голосов
/ 30 апреля 2013
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;
    }
1 голос
/ 24 августа 2012
 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;
 }
0 голосов
/ 07 мая 2017

Строковая фраза обычно содержит слова, разделенные пробелом. Ну, вы можете разделить фразу, используя пробелы в качестве разделяющих символов и считать их следующим образом.

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 голосов
/ 17 марта 2016

Я новичок в stackoverflow, но я надеюсь, что мой код поможет:

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 голосов
/ 05 февраля 2016

Моя идея этой программы такова:

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 голосов
/ 05 февраля 2016
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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...