我正在尝试将句子转换为猪拉丁语,但似乎无法获得正确的输出。例如输入
the rain in spain stays mainly in the plain
使用我当前的代码生成ethay ethay ethay
的输出,而预期的输出为ethay ainray inay ainspay aysstay ainlymay inay ethay ainplay
对于那些不熟悉的人来说,猪拉丁的基本规则是:
如果单词以辅音开头,请将起始辅音向上,直到第一个元音,然后将它们移到单词的末尾。然后在最后添加一个。 (所以板球会成为icketcray)
如果单词以元音开头,只需在结尾添加一个。 (苹果会变成苹果)
如果y是单词中的第一个字母,则将其视为辅音,否则将其用作元音。 (年轻人将成为oungyay,系统将成为ystemsay) 我的代码如下:
import java.util.Scanner;
public class PigLatin{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String line = scan.next();
String piglatin = translateSentence(line);
System.out.println(piglatin);
}
public static String translateSentence(String line){
for (int i =0; i < line.length(); i++ ) {
char c = line.charAt(i);
//for loop to analyze each word
if (Character.isAlphabetic(c)) {
//if (i <='a' || i<='A' || i>='z' || i>='Z'){
String piglatin = translateword(line);
return piglatin;
}
}
return line;
}
public static String translateword(String line) {
Scanner scan = new Scanner(System.in);
int position = firstVowel(line);
String words = "";
String output = "";
for(int i = 0; i<line.length();i++){
words = "";
if (firstVowel(line) == 0) {
words = line + "-way";
} else if (firstVowel(line) == -1) {
words = line + "";
} else {
String first = line.substring(position);
String second = line.substring(0,position) + "ay";
words = first + second;
}
output = output + " " + words;
//words = "";
}
return output;
}
public static int firstVowel(String line) {
for (int i = 0; i < line.length(); i++) {
if (line.charAt(i) == 'a' || line.charAt(i) == 'e'
|| line.charAt(i) == 'i' || line.charAt(i) == 'o'
|| line.charAt(i) == 'u') {
return i;
}
}
return -1;
}
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
首先编写一个单独的函数来获取行
中的单词列表public String[] getWords(String line) {
String list[]=new String[100];
int j=0;
int end;
end=line.indexOf(' ');
while (end!=-1) {
list[j]=line.substring(0, end);
line=line.substring(end+1,line.length());
j++;
end=line.indexOf(' ');
}
list[j]=line.substring(0,line.length());
return list;
}
然后修改您的翻译行以多次调用翻译单词,每次都传递一个单词。 假设您的translateWord()返回一个正确翻译的单词。 translateLine以下列方式进行更改:
if (Character.isAlphabetic(c)) {
String wordList[]=getWords(line);
String piglatin="";
int i=0;
while(!line[i].equals("")) {
piglatin = piglatin+translateword(word[i]);
i++;
}
return piglatin;
}