一次在字符串中搜索多个字母

时间:2013-12-06 15:17:54

标签: java string search indexof

我需要在四个字母的单词末尾搜索字符串中的元音。我可以做一个if-else树并单独搜索每个字母,但我想简化。

您通常会以这种方式搜索信件:

String s = four
if (s.indexOf ('i') = 4)
  System.out.println("Found");
else
  System.out.println("Not found");

我可以用{:1>替换indexOf的参数:

s.indexOf ('a','e','i','o','u')

这将使一切变得更加容易。

不幸的是,我不能使用Regexp类,我只需要使用我们以前学过的东西。

4 个答案:

答案 0 :(得分:3)

正则表达式?我相信这有效。 “任何3个字的字符后跟e i或u。”

    Pattern p = Pattern.compile("\\w{3}[aeiou]?");
    String test = "mike";
    System.out.println("matches? " + p.matcher(test).matches());

好吧,如果你不能使用正则表达式,那么为什么不能使用EDIT:Modified来内联GaborSch的答案 - 我的替代算法非常接近,但使用char而不是创建另一个字符串是WAY更好!向GaborSch致敬!)

    if(someString.length() == 4){
        char c = someString.charAt(3);

        if("aeiou".indexOf(c) != -1){
             System.out.println("Gotcha ya!!");
        }
    }

答案 1 :(得分:3)

String s = "FOUR"; // A sample string to look into
String vowels = "aeiouAEIOU"; // Vowels in both cases

if(vowels.indexOf(s.charAt(3)) >= 0){ // The last letter in a four-letter word is at index 4 - 1 = 3
    System.out.println("Found!");
} else {
    System.out.println("Not Found!");
}

答案 2 :(得分:1)

尝试这种方式:

char c = s.charAt(3);
if("aeiou".indexOf(c) >= 0) {
    System.out.println("Found");
} else {
    System.out.println("Not found");
}

诀窍是你选择第4个字符并在所有元音的字符串中搜索

这是一款无Regexp的单线解决方案。

答案 3 :(得分:0)

这是String#matches(String)的工作和适合的正则表达式:

if (s.matches(".*[aeiou]$")) {
    /* s ends with a vowel */
}

如果不允许使用正则表达式,您可以为此定义一个函数:

static boolean endsWithVowel(String str) {
    if (str == null || str.length() == 0) {  /* nothing or empty string has no vowels */
        return false;
    }
    return "aeiou".contains(str)             /* str is only vowels */
        || endsWithVowel(str.substring(1));  /* or rest of str is only vowels */
}