我有一个单词列表[“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);
}
}
}
答案 0 :(得分:5)
如果要在迭代时从列表中删除项目,则应使用Iterator
,contains(...)
方法需要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)
java-8完整性解决方案:
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));