WordCount程序不计算第一个单词

时间:2015-11-04 02:37:05

标签: java string methods

嗨,我对编程感到困惑和困惑,我正在编写一个计算句子字符串中的单词的程序,但它从不计算字符串中的第一个单词,即使它是'是唯一一个。我知道这不是案例的问题,因为我已经测试过了。任何帮助都感激不尽!这是我的代码

public class WordCount {
    public static boolean isWord (String w, int min) {
        int letters=0;
            for (int i=0; i<w.length(); i++) {
                char c=w.charAt(i);
                boolean l=Character.isLetter(c);
                if (l=true) {
                    letters++;
                }
                else {
                    c=' ';
                }
            }
        if (letters>min) {
            return true;
        }
        else {
            w=" ";
        }
        return false;
    }
    public static int countWords (String a, int minLength) {
        int count=0;
        for (int i=0; i<a.length(); i++) {
            if (a.charAt(i)==' ') {
                String b=a.substring(0, a.indexOf(' ')-1);
                if (isWord(b, minLength)==true) {
                    count++;
                }
            }   
        }
        return count;
    }
        public static void main (String[] args) {
        System.out.print("Enter a sentence: ");
        String sentence=IO.readString();
        System.out.print("Enter the minimum word length: ");
        int min=IO.readInt();
        if (min<0) {
            System.out.println("Bad input");
            return;
        }
        if (sentence.length()<min) {
            System.out.println("Bad input");
            return;
        }
        System.out.println("The word count is "+ countWords(sentence,min));
    }
}

1 个答案:

答案 0 :(得分:0)

问题是你正在检查一个空格作为单词的分隔符,所以你真的在计算空格,而不是单词。像“foo”这样的单词没有空格,所以它会返回0,而“foo bar”只有一个空格并返回1.要测试这个,请尝试使用“foo bar”(带尾随空格)的输入得到正确的计数。

如果您对当前的实现感到满意并且只是想“使其正常工作”,您可以测试以查看修剪的输入长度是否大于零,如果是这样,则在通过循环运行它之前在末尾附加一个空格

String sentence=IO.readString();
// make sure it is non-null
if (sentence!=null){
    // trim spaces from the beginning and end first
    sentence = sentence.trim();
    // if there are still characters in the string....
    if (sentence.length()>0){
       // add a space to the end so it will be properly counted.
       sentence += " ";
    }
}

更简单的方法是在空格上使用String.split()将String拆分为数组,然后计算元素。

// your input
String sentence = "Hi there world!";

// an array containing ["Hi", "there", "world!"]
String[] words = sentence.split(" ");

// the number of elements == the number of words
int count = words.length;

System.out.println("There are " + count + " words.");

会给你:

  

有3个字。