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
Java-How to translate a String to piglatin?
提问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 firstVowel
variable. Then, we get every character from firstVowel
to end
; and store it in startString
. Then, we get every character from start
to 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 for
loop 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 if
statement (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 vowelIndex
when modifying the word.
那么你可以vowelIndex
在修改单词时参考。
if (vowelIndex == 0) {
newWord = word + "way";
} else {
newWord = word.substring(vowelIndex) + word.substring(0, vowelIndex) + "ay";
}
return word;