我目前有这段代码:
String foxes = "The,Quick,Brown,Fox,Jumped,Over,The,Lazy,Dog.";
System.out.println(" Here is the string unedited: " + foxes);
String lowerCase = foxes.toLowerCase() .replaceAll("[\.:;'\"!\?]", " ");
System.out.println(" Here is the string (no caps + no punctuation): " + lowerCase);
List<String> foxesList = new ArrayList<String>(Arrays.asList(lowerCase.split(",")));
简而言之,此代码会创建一个String
,使其不区分大小写,然后将其转换为数组。
我现在需要找到数组中每个重复项的位置,我现在意识到它与嵌套循环有关。重复是发生2次。我需要知道这两个重复的位置。
答案 0 :(得分:1)
您可以使用HashMap<String, int[]
:
Map<String, ArrayList<Integer>> map = new HashMap<>();
for (int i = 0; i < foxesList.size(); i++) {
String fox = foxesList.get(i);
ArrayList<Integer> list = map.get(fox);
if (list == null) {
list = new ArrayList<>();
list.add(i);
map.put(fox, list);
} else {
list.add(i);
}
}
在每个狐狸名称的地图中,您将存储此狐狸的所有索引。如果列表包含多个元素,则表示存在重复。
答案 1 :(得分:0)
您可以使用:
HashMap(key: String, value: ArrayList)
存储字符串
其中arraylist将存储相应的索引。
如果value.size() > 1
,则会出现&gt; 1.
代码:
HashMap<String, ArrayList<Integer>> dictMap = new HashMap<String, ArrayList<Integer>>();
String strArr[]={"Hi", "Foo", "Bar", "Foo"};
for(int i = 0; i < strArr.length; i++){
String str = strArr[i];
if(dictMap.containsKey(str)){
ArrayList<Integer> al = dictMap.get(str);
al.add(i);
}
else{
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(i);
dictMap.put(str, al);
}
}
答案 2 :(得分:0)
Algo找到重复索引
答案 3 :(得分:0)
这里已经有一些正确的答案了,假设你使用的是Java 8,让我简单地给出一个更简洁的答案来创建地图:
Map<String, List<Integer>> map = new HashMap<>();
for (int i = 0; i < foxesList.size(); i++) {
String fox = foxesList.get(i);
map.computeIfAbsent(fox, f -> new ArrayList<>()).add(i);
}
使用Map#computeIfAbsent只允许在地图中已有列表但不包含地址的情况下只有一行。