如果缺少某些字符,请从列表中删除String

时间:2016-04-08 23:54:13

标签: java string

我有一个单词列表[“home”,“shop”,“salmon”,“time”],我有一个混乱的字符串“ahlowemr”。我想检查列表中的每个单词是否包含来自此加扰字符串的字符,如果不包含所有字符,则从列表中删除该单词。

在这个例子中,少了“home”,剩下的3个字符串应该删除。我尝试循环如下,但它不允许我检查字符。我正在筑巢循环,我认为这不是一个好主意。有没有办法解决?

ArrayList<String> myList = new ArrayList<String>();
myList.add("home");
myList.add("shop");
myList.add("salmon");
myList.add("time");

String scrambled = "ahlowemr";

for(String s : myList){
    for(char c : scrambled.toCharArray()){
        if(!s.contains(c)){ //doesn't allow character c
            myList.remove(s);
        }
    }
}

3 个答案:

答案 0 :(得分:5)

如果要在迭代时从列表中删除项目,则应使用Iteratorcontains(...)方法需要String,而不是char }。

以下是您可以做的事情:

for(Iterator<String> it = myList.iterator(); it.hasNext();){
    String s = it.next();
    for(char c : scrambled.toCharArray()){
        if(!s.contains(String.valueOf(c))){ 
            it.remove();
            break;
        }
    }
}

答案 1 :(得分:0)

ArrayList<String> myList = new ArrayList<String>();
myList.add("home");
myList.add("shop");
myList.add("salmon");
myList.add("time");

String scrambled = "ahlowemr";

for(int i = 0; i < myList.size(); i++) {
    for(char c : scrambled.toCharArray()){
        if(!myList.get(i).contains(c.toString())){ //doesn't allow character in that position
            // There is a simple way using a regex or maybe a hashtable
            myList.remove(s);
            break; // break will jump into the next list value
        }
    }
}

答案 2 :(得分:0)

完整性解决方案:

ArrayList<String> myList = new ArrayList<>();

myList.add("home");
myList.add("shop");
myList.add("salmon");
myList.add("time");

String scrambled = "ahlowemr";

myList = myList.stream()
        .filter(s -> scrambled.chars()
                .allMatch(c -> s.contains(String.valueOf((char) c))))
        .collect(Collectors.toCollection(ArrayList<String>::new));