我的任务是创建一个名为“dupWords”的静态方法,该方法获取一个字符串作为参数,并返回一个单词在同一字符串中出现的次数。现在的问题是,我需要将其作为二维数组返回,该数组有 2 列,行将是字符串中有多少个不同的子字符串...
例如:“abcd xyz abcd abcd def xyz”
这将是 [0][3] [5][2] [19][01] 对,第一对意味着单词“abcd”出现 3 次并在索引 0 处表示(您将得到其余的..)
这是二维数组的图像:(文本是希伯来语,但您可以看到绘图)
我开始了一些事情......你可能会认为它已经结束了:/(这只是一个开始) 我想我不太明白如何处理二维数组..
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/