2016-04-08 20 views
0

単語「[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

実際には同じ 'list'と' myList'ていますか?その場合は、コードに他の問題があります。 –

+1

@PaulBoddington Edited。彼らは同じです。 – JasSy

答えて

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

これは問題なくループしますが、リストは空になります。私はs.toCharArrayに対してscrambled.containsをチェックする箇所を逆にしました。ありがとう。 – JasSy

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 
     } 
    } 
} 
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)); 
関連する問題