Java-如何将字符串转换为piglatin?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33403337/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 21:37:16  来源:igfitidea点击:

Java-How to translate a String to piglatin?

javastringcharacter

提问by T3rm3nator

I am writing a pig latin code and I am tripped up by how to get my program to identify where the next vowel in the word is if the first letter in the word is a consonant. Then it moves the first part of the word, up to the first vowel, to the end of the word and prints ay along with it. (ex. trees = eestray)

我正在编写一个猪拉丁代码,如果单词中的第一个字母是辅音,我被如何让我的程序识别单词中下一个元音的位置绊倒了。然后它移动单词的第一部分,直到第一个元音,移动到单词的末尾并打印 ay。(例如树木 = estray)

This is the code I have now

这是我现在的代码

// word is bringing in the string entered from the user
public static void translate(String word) {

    String wordCap, pigLatin = "";
    char vowels;
    int lowest = 0, tempOne, tempTwo, tempThree, tempFour, tempFive;  

    wordCap = word.toUpperCase();
    vowels = wordCap.charAt(0);

    if (vowels == 'A' || vowels == 'E' || vowels == 'I' || vowels == 'O' || vowels == 'U') {
            word = word + "way";
            System.out.println(word);
        }
        else {
            tempOne = wordCap.indexOf('A', 1);
            if (lowest > tempOne && tempOne != -1) {
                lowest = tempOne;
            }
            tempTwo = wordCap.indexOf('E', 1);
            if (lowest > tempTwo && tempTwo != -1) {
                lowest = tempTwo;
            }
            tempThree = wordCap.indexOf('I', 1);
            if (lowest > tempThree && tempThree != -1) {
                lowest = tempThree;
            }
            tempFour = wordCap.indexOf('O', 1);
            if (lowest > tempFour && tempFour != -1) {
                lowest = tempFour;
            }
            tempFive = wordCap.indexOf('U', 1);
            if (lowest > tempFive && tempFive != -1) {
                lowest = tempFive;
            }




public static char vowel(String word) {
    int start= 0, end= 0;
    char vowels;

    for (int i = 0; i < word.length(); i++) {
        vowels = word.charAt(i);
        if (vowels == 'A' || vowels == 'E' || vowels == 'I' || vowels == 'O' || vowels == 'U') {
            end = i;
            break;
        }
    }
    return (char) end;
}

(in translate method)

(在翻译方法中)

for (int i = 0; i<wordCap.length(); i++) {
        if (vowel(wordCap.charAt(i))) {
            vowels = wordCap.charAt(i);
        }

    }

The problem now is that the vowel method is not an applicable method type. It says it must be a char?

现在的问题是元音方法不是适用的方法类型。它说它必须是一个字符?

回答by MeetTitan

Let me try to shorten that method for you ;)

让我尝试为您缩短该方法;)

Try something like this:

尝试这样的事情:

private static final char[] vowels = {'a', 'e', 'i', 'o', 'u'};
public static String translate(String word) {
    int start = 0; // start index of word
    int firstVowel = 0;
    int end = word.length(); // end index of word
    for(int i = 0; i < end; i++) { // loop over length of word
        char c = Character.toLowerCase(word.charAt(i)); // char of word at i, lower cased
        if(Arrays.asList(vowels).contains(c)) { // convert vowels to a list so we can use List.contains() convenience method.
            firstVowel = i;
            break; // stop looping
        }
    }
    if(start != firstVowel) { // if start is not equal to firstVowel, we caught a vowel.
        String startString = word.substring(firstVowel, end);
        String endString = word.substring(start, firstVowel) + "ay";
        return startString+endString;
    }
    return word; //couldn't find a vowel, return original
}

What this snippet does, is iterate over every character in the word, storing the index of the first vowel in the firstVowelvariable. Then, we get every character from firstVowelto end; and store it in startString. Then, we get every character from startto firstVowel; add "ay", and store it in endString. Finally, we concatenate these strings together and return them, resulting in the desired output.

这段代码的作用是遍历单词中的每个字符,将第一个元音的索引存储在firstVowel变量中。然后,我们得到从firstVowel到的每个字符end;并将其存储在startString. 然后,我们得到从start到的每个字符firstVowel;添加“ay”,并将其存储在endString. 最后,我们将这些字符串连接在一起并返回它们,从而得到所需的输出。

We can test this with System.out.println(translate("trees"));

我们可以用 System.out.println(translate("trees"));

EDIT:Without array, as requested:

编辑:没有数组,按要求:

public static String translate(String word) {
    char a = 'a';
    char e = 'e';
    char i = 'i';
    char o = 'o';
    char u = 'u';

    int start = 0;
    int firstVowel = 0;
    int end = word.length();
    for(int i = 0; i < end; i++) {
        char c = Character.toLowerCase(word.charAt(i));
        if(c == a || c == e || c == i || c == o || c == u) {
            firstVowel = i;
            break;
        }
    }
    if(start != firstVowel) {
        String startString = word.subString(firstVowel, end);
        String endString = word.subString(start, firstVowel) + "ay";
        return startString+endString;
    }
    return word;
}

As you can see, arrays shorten things up quite a bit!

如您所见,数组大大缩短了事情的时间!

If you're feeling pedantic about the Arrays.asList().contains()call, we could define our own:

如果您对Arrays.asList().contains()调用感到迂腐,我们可以定义自己的:

public static boolean containsChar(char[] lookIn, char lookFor) {
    boolean doesContainChar = false;
    for(char c : lookIn) {
        if(doesContainChar = c == lookFor)
            break;
    }
    return doesContainChar;
}

回答by Bethany Louise

You might want to use a forloop to iterate through the letters of each word until it finds a vowel. Example:

您可能希望使用for循环遍历每个单词的字母,直到找到一个元音为止。例子:

String wordCap = word.toUpperCase();
char vowels;

for (int i=0; i<wordCap.length(); i++) {
    if (isVowel(wordCap.charAt(i))) {
        vowels = wordCap.charAt(i);
        break;
    }
}

Of course, I only used isVowel()for the sake of keeping the example concise. You'll have to identify it as a vowel the same way you did in your first ifstatement (or write an isVowel()method yourself).

当然,我使用只是isVowel()为了保持示例简洁。您必须像在第一个if语句中所做的那样(或isVowel()自己编写一个方法)将其识别为元音。

For modifying the word, you'll also want to declare a variable to hold the index of the vowel. The previous section of code could be added to for this, like so:

为了修改单词,您还需要声明一个变量来保存元音的索引。可以为此添加上一部分代码,如下所示:

String wordCap = word.toUpperCase();
char vowels;
int vowelIndex;
String newWord;


for (int i=0; i<wordCap.length(); i++) {
    if (isVowel(wordCap.charAt(i))) {
        vowels = wordCap.charAt(i);
        vowelIndex = i;
        break;
    }
}

Then you could reference vowelIndexwhen modifying the word.

那么你可以vowelIndex在修改单词时参考。

if (vowelIndex == 0) {
    newWord = word + "way";
} else {
    newWord = word.substring(vowelIndex) + word.substring(0, vowelIndex) + "ay";
}
return word;