java - 如何计算字符串中相同单词的数量并获取第一个相等单词的索引?

标签 java arrays

我的任务是创建一个名为“dupWords”的静态方法,该方法获取一个字符串作为参数,并返回一个单词在同一字符串中出现的次数。现在的问题是,我需要将其作为二维数组返回,该数组有 2 列,行将是字符串中有多少个不同的子字符串...

例如:“abcd xyz abcd abcd def xyz”

这将是 [0][3] [5][2] [19][01] 对,第一对意味着单词“abcd”出现 3 次并在索引 0 处表示(您将得到其余的..)

这是二维数组的图像:(文本是希伯来语,但您可以看到绘图)

enter image description here

我开始了一些事情......你可能会认为它已经结束了:/(这只是一个开始) 我想我不太明白如何处理二维数组..

public static int[][] dupWords (String str) {

        String [] stringArray = str.split(" ");
        int countWords = 0;
        int index = 0;
        int [][] retArr;

        for (int i = 0; i < stringArray.length; i++) {
            for (int j = 0; j < stringArray.length; j++) {
                if (stringArray[i].equalsIgnoreCase(stringArray[j])){
                    countWords++;
                    index = stringArray[i].indexOf(str); 
                }
            }
        }
    }

请帮忙, 谢谢

最佳答案

查找唯一单词的数量。

您可以通过将 stringArray 中的所有单词放入 HashMap 来做到这一点。 HashMap 稍后会派上用场。

创建一个像这样的数组 retArr = new int[unique][2];

下面是完整的解决方案(注意,我什至没有编译它!)

public static int[][] dupWords (String str) {

    String [] stringArray = str.split(" ");
    int countWords = 0;
    int index = 0;
    HashMap<String, Integer> indexMap = new HashMap<String, Integer>();
    HashMap<String, Integer> countMap = new HashMap<String, Integer>();

    int index = 0;
    for (int i = 0; i < stringArray.size(); i++) {
       String s = stringArray[i];
       if (!indexMap .containsKey(s)) {
         indexMap.put(s, index);
         countMap.put(s, 1);
       }
       else {
         int cnt = countMap.get(s);
         countMap.put(s, cnt+1);
       }
       index += s.length() + 1;
    }

    int [][] retArr = new int[map.size()][2];

    for (int i = 0; i < stringArray.size(); i++) {
       String s = stringArray[i];
       retArr[i][0] = indexMap.get(s);
       retArr[i][1] = countMap.get(s);
    }

    return retArr;
}

现在,如果没有 HashMap 或任何其他动态结构,这是很难做到的。最简单的方法是创建一个比必要的更大的数组,并在最后修剪它。这可能看起来像这样。

public static int[][] dupWords (String str) {

    String [] stringArray = str.split(" ");
    int countWords = 0;
    int index = 0;

    int [][] retArr = new int[stringArray.size()][2];

    int uniqeWords = 0;
    for (int i = 0; i < stringArray.size(); i++) {
       String s = stringArray[i];
       if (s != null) {
         retArr[uniqueWords][0] = str.indexOf(s);
         int cnt = 1;
         for (int j = i + 1; j < stringArray.size(); j++) {
           if (s.equalsIgnoreCase(stringArray[j])) {
             stringArray[j] = null;
             cnt++;
           }
         }
         retArr[uniqueWords][1] = cnt;
         uniqueWords++;
       }
    }

    int[][] newRetArr = new int[uniqueWords][2];
    for (int i = 0; i < uniqueWords; i++) {
      newRetArr[i][0] = retArr[i][0];
      newRetArr[i][1] = retArr[i][1];
    }

    return newRetArr;
}

关于java - 如何计算字符串中相同单词的数量并获取第一个相等单词的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591014/

相关文章:

java - 有人可以指导我解决这个逻辑错误吗?

java - 快速排序分而治之

java - 尝试在Java中打印2d元素数组

java - 如何忽略数组适配器中的第一项

c - C-无法将文本文件中的字符串列表读取并处理到数组中

javascript - 根据长度动态设置数组键

Java - 带有数组字段的枚举

java - 无法在 Restful Web 服务中使用 EJB

C++ 多维数组索引

android - 图片从SD卡到byte[]