使用LinkedHashMap来把字符串中每种字符的下标存储到对应的集合中。利用LinkedHashMap的有序性(提取元素和添加元素的顺序一致)来直接生成答案public static void printIndexes(String str){ LinkedHashMap<Character, List<Integer>> IndexSet = new LinkedHashMap<>(); for(int i=0;i<str.length();i++){ Character c = str.charAt(i); if(!IndexSet.containsKey(c)){ IndexSet.put(c, new ArrayList<Integer>()); } IndexSet.get(c).add(i); } StringBuilder sb = new StringBuilder(); for(char key:IndexSet.keySet()){ List<Integer> values = IndexSet.get(key); if(values.size()>1){ for(int i:values) { sb.append(key+&quot;,&quot;+i+&quot;,&quot;); } } } sb.deleteCharAt(sb.length()-1); System.out.println(sb); } String str = &quot;afcacbcbcki&quot;; printIndexes(str); a,0,a,3,c,2,c,4,c,6,c,8,b,5,b,7