2013-08-05 25 views
2

這是我的第一個問題,它是關於Java的。 我想實現以下邏輯:Java。如何從兩個字符串數組或列表中刪除相同的字符串對象

我有兩個字符串數組(或字符串的字符串列表)。有一個字符串排列(asu) - M1,M2,M3 ...以及一串字符串 (rzs) - M1,M2,M3及其所有可能的組合。每個元素(asu)(例如M1)需要找到包含(例如M1)的(rzs)(M1, M1M2,...)中的元素。例如:從(asu)中取出M1, 將開始在(rzs)中搜索重複(包含)。我們在 (rzs)找到M1M2,它包含M1。之後,我們應該從 數組(列表)中刪除這兩個元素。而我,我的英語技能對不起^^

String[] asu = { "M1", "M1", "M1", "M3", "M4", "M5", "M1", "M1", "M1", "M4", "M5", "M5" }; 
String[] rzs = { "M1", "M2", "M3", "M4", "M5", "M1M2", "M1M3", "M1M4", "M1M5", "M2M3", "M2M4", "M2M5", "M3M4", "M3M5", "M4M5", "M1M2M3", "M1M2M4", 
     "M1M2M5", "M1M3M4", "M1M3M4", "M1M4M5", "M2M4", "M2M5" }; 

public static void main(final String[] args) { 
    work bebebe = new work(); 
    bebebe.mywork(); 
} 

public void mywork() { 

    System.out.println(Arrays.deepToString(rzs)); 
    System.out.println(Arrays.deepToString(asu)); 
    for (int i = 0; i < asu.length; i++) { 
     System.out.println("Итерация: " + i); 
     for (int j = 0; j < rzs.length; j++) { 
      if (asu[i].matches(rzs[j].toString())) { 
       System.out.println(i + " элемент (" + asu[i] + ") в ASU равен " + j + " элементу (" + rzs[j] + ") в RZS"); 
       asu[i] = ""; 
       rzs[j] = ""; 
      } 
     } 
    } 
} 

結果不會刪除的子串項目。不滿足邏輯。 我會感謝您的建議。

回答

2

如果你會使用列表你有一個好很多: 刪除不會問你拿陣列的休息回來,和使用名單意味着你的代碼

較少的邏輯
List<string> asu = Arrays.asList("M1","M1","M1","M3","M4","M5","M1","M1","M1","M4","M5","M5"); 
List<string> rzs = Arrays.asList("M1","M2","M3","M4","M5", 
"M1M2","M1M3","M1M4","M1M5","M2M3","M2M4","M2M5","M3M4","M3M5","M4M5" 
,"M1M2M3","M1M2M4","M1M2M5","M1M3M4","M1M3M4","M1M4M5","M2M4","M2M5"); 
public static void main(String[] args) { 
work bebebe = new work(); 
bebebe.mywork(); 
} 

public static void mywork() { 
    ArrayList<String> tmp1 = new ArrayList<String>(); 
    ArrayList<String> tmp2 = new ArrayList<String>(); 
    System.out.println((rzs)); 
    System.out.println((asu)); 
    for (String curr : asu){ 
    for (String currRzs : rzs){ 
     if (currRzs.contains(curr)) { 
      System.out.println(" item("+curr+") in ASU found contained in ("+currRzs+") in RZS"); 

     if(tmp1.contains(curr) == false) 
     tmp1.add(curr); 

     if(tmp2.contains(currRzs) == false) 
     tmp2.add(currRzs); 
     } 
     } 
    } 

    for (String curr : tmp1){ 
     asu.remove(curr); 
    } 

    for (String curr : tmp2){ 
     rzs.remove(curr); 
    } 
} 
+0

你的代碼很美觀,但你的解決方案也不滿足邏輯。正如我之前所說,如果我們發現M1M2(rzs),我們應該將他與M1比較。如果M1是M1M2的子串,我們應該刪除兩者。 你的代碼不會這樣做。 「包含」語句只比較像M1 = M1這樣的對象,但不包含對象的字符串; –

+0

@EldarNezametdinov包含不等於。你可以將字符串框到你自己的類,並覆蓋等於做indexOf。你想要一個例子嗎? –

+0

如果對你來說不難,因爲我幾天前纔開始學習Java ......我不知道這種情況怎麼做纔對。 –

相關問題