2014-02-14 31 views
1

所以我試圖做一個方法修復,以刪除所有包含字母r的字,然後乘以x2所有字其中包含字母l,如果包含字詞rl,則不要觸摸它。方法的作品,但不是它必須如何。我認爲它必須做一些刪除。需要從arraylist中刪除字符串,其中包含字母,如果包含其他

public class Solution 
{ 
    public static void main(String[] args) throws Exception 
    { 
     BufferedReader bis = new BufferedReader(new InputStreamReader(System.in)); 

     ArrayList<String> list = new ArrayList<String>(); 
     list.add("rose"); //0 
     list.add("liar"); //1 
     list.add("lisa"); //2 
     list = fix(list); 

     for (String s : list) 
     { 
      System.out.println(s); 
     } 
    } 

    public static ArrayList<String> fix(ArrayList<String> list) { 
     // 
     ArrayList<String> temp = new ArrayList<String>(); 
     for(int i = 0; i < list.size(); i++){ 
      String s = list.get(i); 

      boolean strL = s.contains("l"); 
      boolean strR = s.contains("r"); 

      if(strR){ 
       temp.remove(s); 
      } 
      if(strL && strR) { 
       temp.add(s); 
      } else { 

       if(strL) { 
        temp.add(s); 
        temp.add(s); 
         } 
      } 

     } 
     return temp; 
    } 
} 

回答

2

你守ld使用迭代器, 和獨佔或(^)運算符。

public static ArrayList<String> fix(ArrayList<String> list) { 
    ArrayList<String> temp = new ArrayList<>(); 
    for (Iterator<String> i = list.iterator(); i.hasNext();) { 
     String str = i.next(); 
     boolean isL = str.contains("l"); 
     boolean isR = str.contains("r"); 

     if (isR^isL) { 
      if (isR) { 
       i.remove(); 
      } 
      else { 
       temp.add(str); 
       temp.add(str); 
      } 
     } 
     else { 
      temp.add(str); 
     } 
    } 
    return temp; 
} 
+0

它的工作,會讀取關於迭代器和^ –

1

我覺得你的邏輯應該是:

if (strL != strR) { 
    list.remove(word); 
} 

如果既不包含,它什麼都不做。如果它包含兩者,它什麼也不做。如果它包含L而不是R,則將其刪除。如果它包含R而不是L,則將其刪除。

當然,我的代碼正在修改輸入列表。如果你想建立一個temp列表,應該很容易推斷我的答案,以得到你想要的。

+0

即時通訊對不起,我解釋爲壞= |它必須做什麼,它必須將其中包含字母(l)的所有單詞乘以2。 –

0

嘗試此 如果(STRL & & STRR){ temp.add(一個或多個); }否則,如果(STRL){// 什麼也不做 }否則,如果(STRR){// 什麼也不做 }其他{ temp.add(S); }

或簡單的,如果你能做到 (STRL & & STRR){ temp.add(S);其他(!strL & &!strR){ temp.add(s); }

希望它會工作

0

您不必從temp列表中刪除。

做的唯一一件事情就是測試你從列表中的每個迭代你傳入的參數值:

  • 檢查,如果這兩個條件都滿足,在這種情況下,只需要添加的原詞。
  • 測試它是否包含一個l,然後由兩個
  • 乘以否則什麼也不做(你沒有什麼精確爲不包含lr話做):

if(strL && strR) { 
    temp.add(s); 
} else if(strL){ 
    temp.add(s); 
    temp.add(s); 
} 

,輸出:

liar 
lisa 
lisa 
相關問題