计算给定字符串中的单词

时间:2013-12-25 10:30:06

标签: java string

我有两种方法可以确定String中的单词数,但结果永远是1

public static void main(String[] args) {

    System.out.println("Enter your String:");
    String string = in.next();
    System.out.println("Number of Words are:" + countWords(string));
    System.out.println("Number of Words are:" + countWords2(string));

}

public static int countWords(String str) {
    String[] splited2 = str.split(" ");
    return splited2.length;

}

public static int countWords2(String str) {
    String trimed = str.trim();
    return trimed.split("\\s+").length;
}

为什么?

3 个答案:

答案 0 :(得分:5)

Scanner#next()方法,我假设您正在使用它,读取下一个标记,并且默认情况下它不会将空格视为标记的一部分。所以,它确实会读取输入,直到找到第一个空格。

因此,您的输入只包含一个单词,因此也就是结果。尝试使用Scanner#nextLine()方法,您将获得预期的结果。

答案 1 :(得分:1)

用scanner.nextLine()替换in.next()因为next()会给你下一个标记而不是所有的行

Scanner scanner = new Scanner(System.in);
System.out.print("Enter a sentence:");
String sentence = scanner.nextLine();
System.out.println("Number of Words are:" + countWords(sentence));

或者您可以使用BufferedReader,因为它可以更快地阅读整行

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String sentence = br.readLine();
System.out.println("Number of Words are:" + countWords(sentence));

答案 2 :(得分:0)

我建议建立一个这样的函数:

public static int getWordCount(String string){

    int counter = 0;

    boolean wordFound = false;
    int endOfLineIndex = s.length() - 1;

    for (int i = 0; i < endOfLineIndex; i++) {

        if (Character.isLetter(s.charAt(i)) == true)) {
            wordFound = true;
        } else if (Character.isLetter(string.charAt(i)) == false && wordFound == true) {
            counter++;
            wordFound = false;
        } else if (Character.isLetter(string.charAt(i))) {
            counter++;
        }
    }
    return counter;
}

希望我帮忙!