使用scanner来评估字符串中的单词

时间:2014-09-11 04:14:05

标签: java java.util.scanner

我试图编写一个方法,返回“words”参数中至少包含min“但不超过”max c“字符的单词数。

public static int countWords(String words, int min, int max)
{
    Scanner s = new Scanner (words);
    int counter = 0;

 while  (s.hasNext())
    {
    String word = s.next();
    int wordLength = word.length();
    if (wordLength>min && wordLength<max)
    {
        counter= counter + 1;
        s.close();
        }
    }
    return counter;
}

3 个答案:

答案 0 :(得分:1)

只是一个小小的变化。您正在关闭while循环中的扫描仪,将其移出循环并运行。

public static int countWords(String words, int min, int max) {
        Scanner s = new Scanner(words);
        int counter = 0;
        while (s.hasNext()) {
            String word = s.next();
            int wordLength = word.length();
            if (wordLength > min && wordLength < max) {
                counter = counter + 1;
            }
        }
        s.close();
        return counter;
    }

我还建议你改变if条件,使其包含min和max。 if(wordLength&gt; = min&amp;&amp; wordLength =&lt; max){ 例如countWords(&#34;计算此行中的单词1 22 333 4444 55555&#34; 3,4)对于当前条件的任何字符串都不会返回任何结果。

答案 1 :(得分:1)

之前在

中已经讨论过在使用Strings时使用split与scanner的偏好

我更喜欢正则表达式,所以这里是使用String的split方法的解决方案,如下所示:

使用正则表达式

public class Sample {

    public static int countWords(String words, int min, int max) {

        String[] allWords = words.split("(?s)\\s+");
        int counter = 0;

        for (String word : allWords) {
            if(word.length() >= min && word.length() <= max)
                counter++;
        }
        return counter;
    }

    public static void main(String[] args) {
        String s = "find all the long words in this sentence";
        System.out.println(countWords(s,4,7));
    }
}

如果您想使用Scanner,可以这样做:

使用扫描仪

public class Sample {

    public static int countWords(String words, int min, int max) {

        Scanner scan = new Scanner(words);
        int counter = 0;
        int length = 0;

        while(scan.hasNext()){
            length  = scan.next().length();
            if(length >= min && length <= max)
                counter++;
        }
        scan.close();
        return counter;
    }

    public static void main(String[] args) {
        String s = "find all the long words in this sentence";
        System.out.println(countWords(s,4,7));
    }
}

答案 2 :(得分:0)

根据我可以理解的内容,您希望计算指定了max和min

的单词

例如,

"The rain in Spain falls mainly in the plain", 3, 5返回5,因为它们是3个5和2个三分之一

你的代码非常好,除了这部分需要对其逻辑进行一些改变

if (wordLength>min && wordLength<max) 

根据我从您的问题中理解的内容,您需要具有最小长度或最大长度的单词

结果你必须将if语句改为

if (wordLength == min || wordLength == max) {

解释:单词的长度等于最小长度或最大长度,计数器将被添加