如何获取数组重复JAVA的位置

时间:2016-10-19 08:31:24

标签: java arrays loops nested

我目前有这段代码:

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次。我需要知道这两个重复的位置。

4 个答案:

答案 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找到重复索引

  1. 创建一个字符串数组(通过将输入分成“”)
  2. 遍历数组并构建每个数组元素的地图,以列出其在地图中的位置。 3.最后,你在地图上有所有信息。对于每个条目,您都有索引。如果它大于1,那么它是重复的,你有索引

答案 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只允许在地图中已有列表但不包含地址的情况下只有一行。