2017-02-23 14 views
0

現在、このコードはJavaで完全に機能しています。それは文字列を受け取り、それを配列に変換し、すべての複製を削除します。私は、「船乗りが海の海に行って、見ることができるのが見えるが、見ることができるものは深い青い海の海の底である」と見なすことにしました。私はそれが重複の数が多いので、これを使用しました。配列内の複製を見つける方法 - Java

配列に含まれるすべての要素の位置を取得したいと思っています。正しい方法はネストされたループであると信じていますが、これをどのように達成するかはわかりません。誰かが何らかのガイダンスや一般的なアイデアを持っていれば、私はすばらしかったですここで

は、現在のコードです:

static ArrayList<String> removeDuplicates(String[] list) { 
// Store unique items in result. 
ArrayList<String> result = new ArrayList<>(); 
// Record encountered Strings in HashSet. 
HashSet<String> set = new HashSet<>(); 
// Loop over argument list. 
for (String item : list) { 
    // If String is not in set, add it to the list and the set. 
    if (!set.contains(item)) { 
    result.add(item); 
    set.add(item); 
    } 
} 
return result; 
} 
public static void main(String[] args) { 
    String sea1 = "A sailor went to sea sea sea, to see what he could see see see, but all that he could see see see, was the bottom of the deep blue sea sea sea"; 
    String sea2 = sea1.toLowerCase(); 
    String sea3 = sea2.replaceAll("[\.:;,\"!\?]", " "); //remove punctuation + sets to lower case 
    String sea4 = sea3.replaceAll(" ", " "); 
    String sea5 = sea4.replaceAll(" ", ","); 
    String sea6 = sea5.replaceAll("'", " "); 
    String sea7 = sea6.replaceAll(" ", ""); 
    System.out.println("Here is the string: " + sea7); 

String[] sealist = sea7.split(","); 
    System.out.println("Here is the string 'end' with duplicates removed: "); 

// Remove duplicates from ArrayList of Strings. 
ArrayList<String> unique = removeDuplicates(sealist); 
for (String element : unique) { 

    System.out.println("- " + element); 
} 
} 

}

+0

[http://stackoverflow.com/questions/17967114/how-to - 使用していない配列からの複製を効率的に削除する – Jayfray

+0

もし私が正しく理解していれば、あなたの目標は「船乗りが海の海の海に行きました」を参照してください。 「 1つのループ内でStackとPushを使用し、最後に追加した文字列が前のものと重複している場合は追加しないでください。重複したインデックスをカウントするには、別のセットを使用して重複するインデックスを入れます。 インデックスをカウントするには、i - > Nから移動します。また、単語を取得するには、2つのポインタを使用します.1つは単語の先頭を指し、もう1つは単語の最後を指します。 –

答えて

0

あなたのコードが良いですが、順序が重要な場合、なぜLinkedHashSetのを使うのか? リンクされたハッシュセットに要素を追加し、追加された順序で要素を戻すには、単純にtoString()としてエントリを取得します。返された単語の区切りをカンマで区切りますが、簡単に削除できます。それは "[船員、行った、海、見て、何を...]のようになります

static ArrayList<String> removeDuplicates(String[] list) { 
     // Record encountered Strings in HashSet. 
     LinkedHashSet<String> set = new LinkedHashSet<>(); 
     // Loop over argument list. 
     for (String item : list) { 
      // Left this if statement in for clarity (!needed) 
      if (!set.contains(item)) { 
       set.add(item); 
      } 
     } 

     String result= set.toString(); 
     return(result.split(","); 
    } 
関連する問題