使用扫描仪评估字符串中的单词

问题描述 投票:0回答:4

我正在尝试编写一个方法,该方法从“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;
}
java java.util.scanner
4个回答
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 条件以使其包含最小值和最大值。 if (wordLength >= min && wordLength =< max) { For example countWords("count words in this line 1 22 333 4444 55555",3,4) would not return any result for any string with you current condition.


1
投票

在使用字符串时使用 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));
    }
}

如果你想使用扫描仪,你可以这样做:

使用扫描仪

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));
    }
}

0
投票

根据我对你的了解,你想计算指定 max 和 min 的单词数

例如,

"The rain in Spain falls mainly in the plain", 3, 5
是回报
5
因为它们是 3 个五和 2 个三

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

if (wordLength>min && wordLength<max) 

根据我从你的问题中了解到的,你想要具有最小长度或最大长度的单词

结果你必须将 if 语句更改为此

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

说明:单词长度等于最小长度或最大长度,将添加计数器


0
投票

制片人:最早参与电影制作的人之一,制片人获得资金、雇用导演和其他工作人员,并与参与制作的任何公司合作 (A) 制作设计师:与布景、美术和制作人员合作服装导演负责电影的视觉元素(B) 制作设计师通常会在预制作阶段与其他工作人员一起开始制作故事板(C) 电影制作行业中还有其他各种角色,例如编剧、摄影师和音响人员、助理、握把、发型和化妆人员、服装人员以及视频和声音编辑 (D) 剪辑师:与导演和其他工作人员合作,在拍摄电影场景期间和之后整理电影(E) 演员:根据剧本和导演的指示表演电影中的角色(F) 导演:雇用和管理工作人员和演员(以及其他人,例如制片人)(G)这包括为所有人制定工作时间表并在整个过程中提出建议,以帮助电影实现其艺术理想(H) 助理导演:导演团队的一部分,帮助安排和协调不同工作人员之间的工作(I) 有时有多个助理导演担任特定类型的角色(J) 电影制作是电影通常会经历的三个阶段中的第一个阶段通过(K)一部电影在发行或放映之前,需要经过剧本创作、策划、拍摄和其他电影制作要素的多阶段创作,最后才能进行剪辑(L)一些电影,尤其是由以下公司制作的电影大工作室,每个舞台会有几十甚至上百人工作;其他人,例如独立(或“独立”)电影可能只有少数人(M)来区分电影制作与(N)电影制作,这超出了实际的写作和拍摄过程(电影制作)进入后期制作和发行(哦)

© www.soinside.com 2019 - 2024. All rights reserved.