有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我需要获取一个字符串并输出字符串中出现最多的单词

我相信我有正确的代码,以便继续使用字符串中的下一个单词,但是,我真的很难将最常用的单词添加到maxW中。我也对maxCnt感到困惑,我是否需要创建一个完整的单独循环来返回maxCnt

我的教授提到使用if语句来比较maxW和maxCnt,但我真的不知道从哪里开始实现它

String getMode() {
        String tmp = "";
        for(int i=0; i<s.length(); i++){
            if(s.charAt(i)>64 && s.charAt(i)<=122 || s.charAt(i)==32){
                tmp = tmp+s.charAt(i);
                s = tmp;
            }
        }
        String maxW = "";
        int maxCnt = 0;
        for(int i=0; i<s.length(); i++) {
            int p =s.indexOf(" ",i);
            int cnt = 1;
            String w = s.substring(i,p);
            i = p;
            for (int j=p+1; j<s.length(); j++) {
                int p1 = s.indexOf(" ",j);
                String w1 = s.substring(j,p1);
                if(w.equalsIgnoreCase(w1))
                    cnt++;
                j = p1;
                maxW = w+s.substring(j,p1);
            }

        }
        return maxW;
    }

我尝试的所有操作都会导致以下位置出现字符串超出范围的错误代码:

(String.java:1967) (Hw9.java:36) (Hw9.java:64)

这是一个结果应该是什么的例子:如果s=“你比你相信的更勇敢,比你看起来更强大,比你想象的更聪明。”,此方法将返回“You”

提前感谢您的帮助


共 (3) 个答案

  1. # 1 楼答案

    这里有一些计算代码形式注释中提到的单词的方法。。。因为有时以代码形式查看它很有帮助:

    //The map easy way:
    Map<String, Integer> counts = new HashMap<String, Integer>();
    if (!counts.containsKey("word")) {
        counts.put("word", 0);
    }
    counts.put("word", counts.get("word") + 1);
    
    //The double array way (dirty):
    int wordsAddedCount = 0;
    boolean wordFound = false;
    String[] wordsList = new String[500];//assumes max of 500 different words
    Integer[] counts2 = new Integer[500];
    for (int i = 0; i < wordsAddedCount; i++) {
        if ("word".equals(wordsList[i])) {
            wordFound = true;
            counts2[i]++;
            break;
        }
    }
    if (!wordFound) {
        wordsList[wordsAddedCount] = "word";
        counts2[wordsAddedCount++] = 1;
    }
    
  2. # 2 楼答案

    如果你不能使用地图,那么也许你可以使用两个平行列表。一个用于单词,一个用于计数。搜索字符串列表中的每个单词。如果找到它,则将其对应的计数列表项增加1。如果找不到,请将其添加到列表中,并将相应的计数条目设置为1

    一旦你完成了列表的构建,然后找到最大计数的索引,并使用它来索引到单词列表中,以获得最常出现的单词

    请记住,对于某些数据集(句子),可能存在多方面的联系

  3. # 3 楼答案

    我用你的例句运行了你的代码

    使用您提供的字符串,s有一个字符,Y。原因是循环只执行一次

    一旦在循环中设置s = tmp,那么s的长度现在是1,因此循环在一次迭代后立即退出

    我建议你一件一件地做。把问题分成几块,然后一块一块地解决。使用调试器,或者,如果您对调试器还不满意,可以自由地使用System.out.println()