这是我第一次使用链表。我理解如何正确地迭代它,以及如何设置它。我遇到的问题是我不确定如何正确地做到这一点,检查一个单词的第一个字母是否是一个元音,如果是这样,从列表中删除该单词。到目前为止,这是我的代码:
import java.util.*;
public class LinkedListExample
{
public static void main(String args[])
{
//Linked List Declaration
LinkedList<String> linkedlist = new LinkedList<String>();
Scanner sc=new Scanner(System.in);
for(int i = 0; i<4; i++)//filling the list
{
System.out.println("What is your word?");
String yourValue = sc.next();
linkedlist.add(yourValue);
sc.nextLine();
}
Iterator<String> i = linkedlist.iterator();
while (i.hasNext())
{
String vowels = "aeiouy";
//Need to remove the words with the vowels as the first letter here
}
while(i.hasNext())//printing out new list
{
System.out.println(i.next());
}
}
}
我知道我必须使用for循环来完成这项工作。我的第一个想法是使用for循环来检查我的字符串元音,但我不确定如何使用链表进行工作。我也不确定如何在使用迭代器迭代链表时删除一些东西。
答案 0 :(得分:0)
while (i.hasNext())
{
String vowels = "aeiouy";
//Need to remove the words with the vowels as the first letter here
boolean found = false;
String str = i.next();
for(int counter = 0; counter < vowels.length(); counter++)
if(vowels.charAt(counter) == str.charAt(0)) {
found = true;
break;
}
if(found) { /* do stuff here */}
}
修改强>:
之后,在打印新值之前,您必须通过执行以下操作再次重新初始化迭代器:i = linkedlist.iterator();
。注意这一点。 :)
答案 1 :(得分:0)
List<String> filteredList = list.stream().filter(n->n.startsWith("a")||n.startsWith("e")||n.startsWith("i")||n.startsWith("o")||n.startsWith("u")).collect(Collectors.toList());
List<String> unique = new ArrayList<String>(list);
unique.removeAll(filteredList);
unique.forEach(System.out::println);
这里创建了一个数组列表,其中包含以a,e,i,o,u开头的单词,然后我创建了一个包含所有元素的数组列表,然后我删除了筛选列表中存在的元素唯一列表是您需要的名单。我希望我的帖子会有所帮助。