PigLatinTranslator java

PigLatinTranslator java,java,translation,apache-pig,Java,Translation,Apache Pig,我正在做一个猪拉丁翻译,它把给定的单词翻译成猪拉丁语。这是pig拉丁语法和is元音法 public static void pigLatin(String s) { char[] array = s.trim().toCharArray(); if(isVowel(s.charAt(0)) && !Character.toString(s.charAt(0)).equalsIgnoreCase("y")){ System.o

我正在做一个猪拉丁翻译,它把给定的单词翻译成猪拉丁语。这是pig拉丁语法和is元音法

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;
    }
公共静态无效字符串(字符串s){
char[]数组=s.trim().toCharArray();
if(is元音(s.charAt(0))&&!Character.toString(s.charAt(0)).equalsIgnoreCase(“y”)){
System.out.println(s+“方式”);
}否则{
int i=0;
字符串toReturn=“”;
做{
toReturn+=数组[i];
i++;
}而(!is元音(s.charAt(i))和&!Character.toString(array[i]).equalsIgnoreCase(“y”);
System.out.println(s.substring(i)+toReturn+“ay”);
}
}
公共静态布尔IS元音(字符c){
char[]元音=新的char[]{'a','e','i','o','u','y'};
对于(inti=0;i忽略大小写,这是“BLRD”还是“bird”?因为如果它没有元音,do-while循环不会终止,除非越界

第二种情况下,“quiet”应该是“uietqay”,除非您想添加特殊的逻辑以保持“qu”在一起。您可以在while条件下通过使其更丑陋来实现这一点:

while( (!isVowel(s.charAt(i)) || isQU(s, i)) && !Character.toString(array[i]).equalsIgnoreCase("y"))
然后实现相应的
isQU(字符串s,int索引)

但是我建议,为了使代码更具可读性,需要进行更多的重写。因此,我不太清楚为什么
是元音
检查“y”,而while条件也检查“y”。有些时候你使用
数组[I]
,有些时候你使用
字符(I)
。这种不一致性使您的代码更难阅读,几乎没有或根本没有好处。

忽略大小写,这是“BLRD”还是“bird”?因为如果它没有元音,则do while循环不会终止,除非超出范围

 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;
}    
第二种情况下,“quiet”应该是“uietqay”,除非您想添加特殊的逻辑以保持“qu”在一起。您可以在while条件下通过使其更丑陋来实现这一点:

while( (!isVowel(s.charAt(i)) || isQU(s, i)) && !Character.toString(array[i]).equalsIgnoreCase("y"))
然后实现相应的
isQU(字符串s,int索引)

但是我建议,为了使代码更具可读性,需要进行更多的重写。因此,我不太清楚为什么
是元音
检查“y”,而while条件也检查“y”。有些时候你使用
数组[I]
,有些时候你使用
字符(I)
。这种不一致性使您的代码更难阅读,几乎没有或根本没有任何好处。

公共静态字符串pigLatin(字符串a){
 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;
}    
a=a.toLowerCase(); 字符串[]x=a.split(“”); int-vowl=0; 字符串c=“”; 字符串d=“”; 字符串trans=“”; 对于(int i=0;i
公共静态字符串pigLatin(字符串a){
a=a.toLowerCase();
字符串[]x=a.split(“”);
int-vowl=0;
字符串c=“”;
字符串d=“”;
字符串trans=“”;

对于(int i=0;iQuiet打印uietqay,当它被认为是ietqay时,但这没有意义,因为,你应该把所有常数都取到元音,这应该意味着uietqay,那么为什么它是ietqay?哈?你是在要求我们教你piglatin的规则吗?在请求帮助制作程序之前,要牢牢掌握你的要求是什么ram符合它们。我们不是来给你要求的。我只是向你解释发生了什么……我知道这些要求是什么。我在我的评论
中清楚地显示了它们,你应该把所有常数都带到元音上。如果你“应该把所有常数带到元音上”,你为什么还要说,“它假设[原文如此]是ietquay”?这两种说法是相互排斥的。它们不可能都是真的。而且没有什么“清楚”的"关于那一段。安静打印uietqay,当它被认为是ietquay时,但这没有意义,因为,你应该把所有常数都取到元音,这应该意味着uietquay,那么为什么它是ietquay?哈?你是在要求我们教你猪拉丁语的规则吗?在寻求帮助之前,要牢牢掌握你的要求让程序符合它们。我们不是来给你要求的。我只是向你解释发生了什么……我知道要求是什么。我已经在我的评论
中清楚地显示了它们,你应该把所有常数都带到元音上。如果你“应该把所有常数带到元音上”,你为什么还要说,“它假设[sic]是ietquay”?这两种说法是相互排斥的。它们不可能都是真的。而且那一段没有“清楚”的地方。谢谢!正是我要找的。我的
是元音
检查“y”,因为我在代码中的其他地方也使用它,因此我需要它来检查“y”"是一个元音。我不怀疑你可能有这样的理由。但这仍然会使你的代码更难阅读。一个简单的解决办法:添加注释。如果你在一个月后回到这段代码,或者让一个网络陌生人看代码,你会很高兴你提高了可读性。好的,我会考虑到这一点,我只是解释了为什么我这么做,但com我的
是元音
检查“y”,因为我也在代码的其他地方使用它,因此我需要它来检查“y”是一个元音。我不怀疑你可能有这样的理由。但这仍然会使你的代码更难阅读。一个简单的解决办法:添加注释。如果你在一个月后回到这段代码,或者让一个网络陌生人看代码,你会很高兴你提高了可读性。好的,我会考虑到这一点,我只是解释了为什么我这么做,但com心理辅导更有意义。在第一个答案被接受3个月后提出一个新答案-你不认为用几句话来解释为什么你的解决方案是一个好的或更好的选择是一个好主意吗?在第一个答案被接受3个月后提出一个新答案-你不认为这是一个好主意吗用几句话解释一下,为什么你的解决方案是一个好的甚至是一个赌注