Java 如何使用迭代器测试字符串是否以元音开头

Java 如何使用迭代器测试字符串是否以元音开头,java,iterator,Java,Iterator,我第一次用迭代器写了一个程序。我有一个字符串数组列表,并使用hasNext和next方法打印它们。我现在正试图使用前面的方法进行回溯,在这样做的同时,我假设检查每个元素,如果它以元音开头,我需要将其从列表中删除。这是我遇到麻烦的一段代码 while (iterator.hasPrevious()) { String s = iterator.previous(); if (s.startsWith("a")) {

我第一次用迭代器写了一个程序。我有一个字符串数组列表,并使用hasNext和next方法打印它们。我现在正试图使用前面的方法进行回溯,在这样做的同时,我假设检查每个元素,如果它以元音开头,我需要将其从列表中删除。这是我遇到麻烦的一段代码

while (iterator.hasPrevious())
      {
         String s = iterator.previous();
         if (s.startsWith("a"))
         {
            iterator.remove();
         }   
         System.out.print(" "+ s);
      }
任何帮助都将不胜感激

要检查字符串是否以元音开头,可以使用正则表达式

例如:

String[] input = {"abc", "def", "ghi"};
for (String s: input) {
    System.out.printf("\"%s\" starts with a vowel? %b%n", s, s.matches("(?i)^[aeiouy].*$"));
}
输出

就你而言

startsWith方法只接受一个文本,因此它不是您想要的

相反,您可以在类中使用常量模式,例如:

static final Pattern STARTS_WITH_VOWEL = Pattern.compile("^[aeiouy]", Pattern.CASE_INSENSITIVE);
然后在循环中,您可以使用:

if (STARTS_WITH_VOWEL.matcher(s).find()) {
    ...
}

只需更改if以包含更多条件


如果s.startsWitha | |如果s.startsWitha…

一种可读的方法是列出所有元音

String vowels = "aeiou";
String testString = ... // Iterator String 
if (vowels.indexOf(Character.toLowerCase(testString.charAt(0))) != -1) {
    ... // Start char is vowel
}
Collection<Character> vowels = new HasSet<~>();
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');

那有什么问题?堆栈跟踪?不想要的结果?我试过了,查拉托,我试过了,开始了。它不会检查并删除适当的字符串。我找不出正确的代码。别忘了,就代码而言,a和a不是一回事。如果要删除以元音开头的字符串,必须同时考虑其大小写版本。@JonK remove始终删除迭代器返回的最后一个元素。不管你是向前还是向后迭代。@DavidConrad确实如此-谢谢你的更正!不区分大小写的匹配怎么样?s、 toLowerCase。匹配项。。。“会有办法的。”古鲁沙兰人也这么想。。。刚刚编辑!由于这似乎是一个学术练习,也许解释正则表达式的作用会很有用?而且%n可能是一个拼写错误-应该是\n:P@GurusharanS不。这是一个字符串格式的新行,尽管\n同样有效。我检查的字符串是aaa。所以有其他错误,否则它会删除aaa。我只是在尝试代码,如果我能让它工作,我会添加更多的条件。@Mena首先让它工作,然后让它变得优雅?如果他还没有弄明白if语句,你凭什么认为他会理解正则表达式匹配?我们能在元音中加上大写字母吗?我喜欢这样,加上Character.toLowerCasecharA哈希集会更有效。也许Set元音=新的hashsetarray.asList'a','e','i','o','u',这些我们将在下周学习。不过你可能是对的!
Collection<Character> vowels = new HasSet<~>();
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');
if (vowels.conatins(Character.toLowerCase(s)))
{
    iterator.remove();
}