需要从arraylist中删除包含字母的字符串,如果包含其他字符则不要触摸

时间:2014-02-14 19:55:16

标签: java arraylist

所以我正在尝试修复方法,删除其中包含字母 r 的所有单词,然后将x2中包含字母 l 的所有单词与其相乘,如果word中包含 r l ,则不要触摸它。方法有效,但不是必须的。我认为必须要做删除。

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

5 个答案:

答案 0 :(得分:2)

你应该使用Iterator, 和独家或(^)运算符。

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

答案 1 :(得分:1)

我认为你的逻辑应该是:

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

如果它既不包含,也不执行任何操作。如果它包含两者,它什么都不做。如果它包含L而不包含R,则将其删除。如果它包含R而不是L,则将其删除。

当然我的代码正在修改输入列表。如果你想建立一个temp列表,那么应该很容易推断我的答案以获得你想要的东西。

答案 2 :(得分:0)

试试这个     if(strL&amp;&amp; strR){         temp.add(一个或多个);     } else if(strL){         // 没做什么     } else if(strR){         // 没做什么     } else {         temp.add(一个或多个);     }

或者你可以做的很简单     if(strL&amp;&amp; strR){         temp.add(一个或多个);     } else(!strL&amp;&amp;!strR){         temp.add(一个或多个);     }

希望它会起作用

答案 3 :(得分:0)

您无需从temp列表中删除。

唯一要做的就是从参数中传递的列表中测试每次迭代得到的值:

  • 检查两个条件是否都为真,在这种情况下只需添加原始单词。
  • 测试它是否包含l,然后将其乘以2
  • 否则什么都不做(你没有准确地对不包含lr的单词做什么):

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

哪个输出:

liar
lisa
lisa

答案 4 :(得分:0)

这是答案...

public class Solution {

    public static void main(String[] args) throws Exception {
        ArrayList<String> list = new ArrayList<String>();
        list.add("rose"); // 0
        list.add("love"); // 1
        list.add("lyre"); // 2
        list = fix(list);

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

    public static ArrayList<String> fix(ArrayList<String> list) {
        // 
        ArrayList<String> teampList = new ArrayList<String>();

        for (int i = 0; i < list.size(); i++) {
            String mainList = list.get(i);

            boolean checkL = mainList.contains("l");
            boolean checkR = mainList.contains("r");

            if (checkR) {
                teampList.remove(mainList);
            }
            if (checkL && checkR) {
                teampList.add(mainList);
            } else {
                if (!checkL && !checkR) {
                    teampList.add(mainList);
                }

                if (checkL) {
                    teampList.add(mainList);
                    teampList.add(mainList);
                }
            }

        }//end for
        return teampList;
    }

}