3

我必须取一个字符串并将该字符串转换为 piglatin。piglatin有三个规则,其中之一是:

如果英语单词以元音开头,则返回英语单词 + "yay" 用于 piglatin 版本。

所以我诚实地尝试这样做,希望得到一个错误,因为 startsWith() 方法接受一个字符串作为参数,而不是一个数组。

 public String pigLatinize(String p){
    if(pigLatRules(p) == 0){
        return p + "yay";
    }
}

public int pigLatRules(String r){
    String vowel[] = {"a","e","i","o","u","A","E","I","O","U"};
    if(r.startsWith(vowel)){
        return 0;
    }        
}

但如果我不能使用数组,我将不得不做这样的事情

if(r.startsWith("a")||r.startsWith("A")....);
     return 0;

并测试每一个不包括 y 的元音,这会占用大量空间,就我个人而言,我认为它看起来相当混乱。

在我写这篇文章时,我正在考虑以某种方式通过迭代对其进行测试。

 String vowel[] = new String[10];
 for(i = 0; i<vowel[]; i++){
     if(r.startsWith(vowel[i]){
         return 0;
     }

我不知道这种迭代尝试是否有意义。

4

3 回答 3

1

将所有这些字符放入 HashSet 中,然后执行查找以查看字符是否有效并相应地返回 0。

请通过一些关于 HashSet 插入/查找的示例。它应该是直截了当的。

希望这可以帮助。

于 2012-11-02T07:59:38.467 回答
1

你的代码:

String vowel[] = new String[10];
for(i = 0; i<vowel[]; i++){
    if(r.startsWith(vowel[i]){
        return 0;
     }
}

实际上非常接近应该工作的解决方案(假设您实际上在数组中放置了一些值)。

您需要在其中输入什么值,正如您提到的,您可以使用元音的所有可能值填充数组。那些当然是

String[] vowel={"a","A","e","E","i","I","o","O","u","U"};

现在你有了这个,你想在数组上循环(如你所计算的那样)并进行检查:

public int pigLatRules(String r){
    final String[] vowels={"a","A","e","E","i","I","o","O","u","U"};
    for(int i = 0; i< vowels.length; i++){
        if(r.startsWith(vowels[i])){
             return 0;
         }
    }
    return 1;
}

不过,您可以对此进行一些改进。有些是最佳实践,有些只是选择,有些是性能。

至于最佳实践,您当前正在从此函数返回一个 int 。您最好将此函数的结果更改为布尔值(如果您没有遇到它们,我建议您查找它们)。

至于你说你不喜欢有一个包含大写和小写元音的数组的选择。这里有一些信息。字符串上有很多方法http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html其中之一是 toLowerCase() 你可以猜到小写整个字符串. 如果您对传递给您的函数的工作执行此操作,您将需要执行的检查量减少一半。

您还可以进入更多内容,但这只是一点点。

于 2012-11-02T13:49:54.613 回答
0

将所有元音放在一个字符串中,抓住您正在测试的单词中的第一个字符,然后查看您的字符是否在所有元音的字符串中。

于 2012-11-02T08:00:45.467 回答