猪拉丁语翻译java

时间:2011-12-13 17:38:25

标签: java translation apache-pig

我正在研究一个猪拉丁语翻译器,它将给定的单词翻译成猪拉丁语。这是猪拉丁方法和isVowel方法。

public static void pigLatin(String s) {
        char[] array = s.trim().toCharArray();
        if(isVowel(s.charAt(0)) && !Character.toString(s.charAt(0)).equalsIgnoreCase("y")){
            System.out.println(s+"way");
        }else {
            int i = 0;
            String toReturn = "";
            do {
                toReturn += array[i];
                i++;
            }while(!isVowel(s.charAt(i)) && !Character.toString(array[i]).equalsIgnoreCase("y"));
            System.out.println(s.substring(i)+toReturn+"ay");
        }
    }

    public static boolean isVowel(char c) {
        char[] vowels = new char[] {'a','e','i','o','u','y'};
        for(int i = 0;i<vowels.length;i++) {
            if(Character.toString(vowels[i]).equalsIgnoreCase(Character.toString(c))) {
                return true;
            }
        }
        return false;
    }

问题是当我输入单词“BIrD”和“quiet”时。第一个抛出java.lang.StringIndexOutOfBoundsException: String index out of range: 4 第二个没有正确转换。安静打印uietqay,当它假设是ietquay,但这没有意义,因为,你应该把所有常数带到元音,这应该意味着uietquay所以为什么它是ietquay?有人可以指点我正确的方向吗?

注意:这不是作业。

2 个答案:

答案 0 :(得分:2)

无视案例,这是“BLRD”还是“鸟”?因为如果它没有元音,那么你的do-while循环不会因为越界而终止。

你的第二种情况,“安静”应该是“uietqay”,除非你想添加特殊的逻辑来保持“qu”在一起。你可以通过使它变得更加丑陋来实现这一目标:

while( (!isVowel(s.charAt(i)) || isQU(s, i)) && !Character.toString(array[i]).equalsIgnoreCase("y"))

然后实施适当的isQU(String s, int index)

但我建议稍微改写一下是为了让你的代码更具可读性。因此,我不太确定为什么你的isVowel检查“y”而你的while条件也会检查“y”。有些时候您使用array[i],有些时候使用charAt(i)。这种不一致使得您的代码难以阅读而几乎没有任何好处。

答案 1 :(得分:1)

 public static String pigLatin(String a){
    a=a.toLowerCase();
    String [] x=a.split(" ");
    int vowl=0;
    String c="";
    String d="";
    String trans="";
    for(int i=0; i<x.length; i++){
       for(int j = 0;j<x[i].length();j++){
           if(x[i].charAt(j)=='a'||x[i].charAt(j)=='e'||x[i].charAt(j)=='i'||x[i].charAt(j)=='o'||x[i].charAt(j)=='u'){
               vowl=j;
               j=x[i].length();
            }
        }
       c=x[i].substring(0,vowl);
       d=x[i].substring(vowl,x[i].length());
       trans+= d+c+"ay ";
    }
    return trans;
}