找到单词中第一个元音的位置

时间:2014-10-30 18:09:35

标签: java arrays string sorting

我正在尝试编写一个将英语翻译成PigLatin的程序。我目前正在尝试解决关于在哪里找到单词的第一个元音的部分,这样程序可以正确地切割单词并正确地重新排列它。

例如,字符串“你好我是一个人”成为“ellohay Iyay amyay ayay uygay”。 (在列表中我认为我的猪拉丁是正确的,这是我创建的一个例子。

因此,“what”这个词变成了“atwhay”。程序发现第一个元音在插槽2中,然后给我那个整数,2。

我在考虑首先将它与字符串进行比较,元音=“aeiouy”,然后从那里开始,但我被卡住了。 这就是我所拥有的:

public static int indexOfFirstVowel(String word){
   int index=0;
   String vowels="aeiouy";
   return index;

}

理论上,索引会更新到第一个元音的位置。

4 个答案:

答案 0 :(得分:4)

这是你可以做到的一种方式:

final static String vowels = "aeiouy";
public static int indexOfFirstVowel(String word){
    String loweredWord = word.toLowerCase();

    for (int index = 0; index < loweredWord.length(); index++)
    {
        if (vowels.contains(String.valueOf(loweredWord.charAt(index))))
        {
            return index;
        }
    }

    // handle cases where a vowel is not found
    return -1;
}

这只是按字母逐字逐句,并检查每个字符,看它是否存在于你的元音字符串中。

答案 1 :(得分:3)

为什么不使用代表ASCII表中元音的掩码(不是extented)?

这不是最简单的解决方案,但它实际上非常快,因为它使用按位操作。

如果没有找到元音,则返回-1

public static int indexOfFirstVowel(String aString) {
    for (int i = 0; i < aString.length(); i++) {
        char c = aString.charAt(i);

        if ((c > 64) & ((0x110411101104111L & (1L << (c - 65))) > 0)) {
            return i;
        }
    }

    return -1;
}

修改

我忘记了扩展的ASCII表。

取代:

if ((c > 64) & ((0x110411101104111L & (1L << (c - 65))) > 0))

通过

if ((c > 64) & (c <= 121) & ((0x110411101104111L & (1L << (c - 65))) > 0))

其中121是'y'的ascii代码。

答案 2 :(得分:1)

您可以使用方法charAt()

获取String的每个字符
public static int englishVowelIndexOf(String word){
    char[] vowels = {'a','e','o','i','u','y'};
    String wordLowered =  word.toLowerCase();
    for (int i=0; i < wordLowered.length(); i++){
        for (int j=0; j < vowels.length(); j++) {
           if (wordLowered.charAt(i) == vowels[j]){
              return i;
           }
        }
    }
    return -1;
}

答案 3 :(得分:0)

public static int indexOfFirstVowel(String word){
   int i;
    for(i=0; i<word.length();i++){  
     switch(word.charAt(i)){
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
        case 'y':
        return i;
     }
    }
   return -1;
}