2016-10-19 16 views
1

を複製:要するに私は現在、このコードを持っているJAVA

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回発生するTheです。私はこれら2つの重複の位置を知る必要があります。あなたはHashMap<String, int[]を使用することができます

答えて

1

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); 
    } 
} 

このマップでは、各キツネ名のために、あなたは、このキツネのすべてのインデックスを格納します。リストに要素が複数ある場合は、重複があることを意味します。

+0

おかげさまで、何を印刷するのかを知りたい人にとっては、単に地図であり、その答えが与えられています。あなたに小道具、このコードは本当に助け:)。 –

0

あなたは使用することができます。

HashMap(key: String, value: ArrayList) 

を文字列のArrayListには、対応するインデックスを格納する

を格納します。

value.size() > 1場合、それはだキーの発生> 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); 
     } 
    } 
+0

申し訳ありませんが、あなたがこれで何を意味するのか十分に理解していません。 –

+0

挿入コードが追加されました。見てみましょう。次に、arraylistのサイズが1より大きいかどうかを調べるために、各マップエントリをトラバースしてチェックする必要があります。 –

0

アルゴはして入力をsplitingことにより、(文字列の配列を作成し、重複

  1. のインデックスを見つけるために "" )
  2. 配列全体を反復し、各配列要素のマップをマップ内の位置のリストに作成します。 3.最後に地図にすべての情報があります。あなたがインデックスを持っているすべてのエントリについて、それが発生します。それが1以上である場合、それは重複しているuは、インデックス
0

を持ってここではいくつかの正しい答えはすでにありますが、私はちょうどあなたは、Java 8を使用していると仮定して、マップを作成するには、わずかにより簡潔なものを与えてみましょう:Map#computeIfAbsentを使用して

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); 
} 

では、すでにマップ内のリストを持っているし、そうでない場合の両方のためのちょうど1行を持つことができます。

関連する問題