2015-11-02 59 views
-1

我試圖從陣列列表中刪除重複的,我試圖用簡單的for循環,而不是hashset ..從數組刪除重複的單詞和返回唯一相同的數組

能有人建議我如何能提高我的程序:

public class removeduplicates { 

    public static void main(String[] args) { 
     String[] words={"Others","Others","Others","Sentence"}; 

     String output=words[0]; 
     int count=0; 

     for(int i=0;i<words.length-1;i++) { 
      for(int j=i+1;j<words.length;j++) { 
       if(words[i].equals(words[j])) { 
        count++; 
       } 
       else { 
        output=output+words[j]; 
       } 
      } 
      i=count; 
     } 
     System.out.println(output); 
    } 
} 

在這個程序中,如果我們給輸入其他人,一句話,其他人,然後一句話我沒有得到所需要的輸出:我只需要OthersSentence作爲輸出.. 。

如果可能,我有一個條件,當我輸入單詞數組時,我需要在同一數組單詞中只有唯一值的輸出數組。

+0

爲什麼不使用哈希? – davejagoda

+1

請記住,無論如何您都無法調整數組大小,那麼您如何期望「移除」元素?我強烈要求你使用一個集合。 –

+0

只需對它進行排序,然後再去除它,並將數據放入另一個列表中,非常簡單。 – Porcelain

回答

0
String [] input={"other", "other","sentence","other"}; 

    String current=input[0]; 
    boolean found=false; 
    for(int i=0; i<input.length; i++){ 
     if (current == input[i] && !found) { 
      found = true; 
     } else if (current != input[i]) { 
      System.out.print(" " + current); 
      current = input[i]; 
      found = false; 
     } 
    } 
0

我建議使用集合,你不能是一個link

0

解決重複簡單的方法是宣告已經使用HashSet調整數組大小

ArrayList<String> noDuplicateList = new ArrayList<>(); 
String[] words={"Others","Others","Others","Sentence"}; 
for(int i=0;i<words.length;i++) { 
    if(!noDuplicateList.contains(words[i])){ 
     noDuplicateList.add(words[i]); 
    } 
} 

這裏,反正看此代碼使用循環:

第1步:用替換重複值

String[] words={"Others","B","Sentence","A","Others","A","Sentence"}; 

for(int i=0; i < words.length ;i++) { 

    String toBeRemoved = words[i]; 

    for(int j=i+1 ; j < words.length; j++) { 
     if(words[j] != null && words[j].equals(toBeRemoved)) { 
      words[i] = null; 
     } 
    } 
} 

現在,如果您打印words值,則輸出將是:

System.out.println(Arrays.asList(words)); 

輸出:[null, B, null, null, Others, A, Sentence]

步驟2:取出空值(有許多方法來做它)例如:

List<String> list = new ArrayList<>(Arrays.asList(words)); 
list.removeIf(new Predicate<String>() { 
    @Override 
    public boolean test(String t) { 
     return (t == null || t.length() < 0); 
    } 
}); 
words = list.toArray(new String[0]); 

使用lambda JDK 8:

words = Arrays.stream(words).filter(t -> (t != null && t.length() > 0)).toArray(String[]::new); 

現在,如果你打印words值,則輸出將是:

System.out.println(Arrays.asList(words)); 

輸出:[B, Others, A, Sentence]

+0

嗨,謝謝你的回覆。但在這個時候,我給 String [] words = {「Others」,「Sentence」,「Others」,「Sentence」};它看起來像是一個無限循環。 –