我正在尝试编写一个将英语翻译成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;
}
理论上,索引会更新到第一个元音的位置。
答案 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;
}