我必须取一个字符串并将字符串转换为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;
}
我不知道迭代的尝试是否有意义。
答案 0 :(得分:1)
将所有这些字符放在HashSet中,然后执行查找以查看字符是否有效,并相应地返回0.
请在HashSet插入/查找上查看一些示例。它应该是直截了当的。
希望这有帮助。
答案 1 :(得分: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。您最好将此函数的结果更改为布尔值(如果您没有遇到它们,我建议您查看它们。)
至于一个选择,你说你不喜欢有一个带有upercase和小写元音的数组。这里有一些信息。字符串上有很多方法http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html其中一个是toLowerCase(),你可以猜测它是一个整个字符串。如果你对你传入你的职能所做的工作这样做,你就需要减少一半的支票。
你可以进入更多但这只是一点点。
答案 2 :(得分:0)
将所有元音放入一个字符串中,抓住你正在测试的单词中的第一个字符,然后查看你的字符是否在所有元音的字符串中。