这部分我想实施,但不知道如何: 在Pig Latin中,直到第一个元音的所有辅音都应移到单词的末尾。因此,虽然“笔记本电脑”仍然是“aptoplay”,但“string”应该变成“ingStray”。
我有这个,第一部分工作正常。
public static String doStuff(String word) {
int number = 0;
char[] vowel = { 'a', 'e', 'i', 'o', 'u' };
char first = word.charAt(0);
char second = Character.toLowerCase(first);
if (second == 'a' || second == 'e' || second == 'i' ||
second == 'o' || second == 'u') {
word = word + "ay";
} else {
for (int i = 0; i < word.length(); i++) {
for (int j = 0; j < 5; j++) {
if (word.charAt(i) == vowel[j]) {
word = word.substring(i + 1) + word.substring(i) + "ay";
break;
}
}
}
return word;
}
答案 0 :(得分:4)
首先,您的break
应该突破两个循环。为此,请在第一个循环之前添加一个标记,如
outerloop:
for (int i = 0; i < word.length(); i++) {
然后代替break;
放break outerloop;
第二,
word = word.substring(i + 1) + word.substring(i) + "ay";
不起作用,因为当您找到元音时,您希望将其保留在前面,因此i + 1
应该只是i
。然后,“ay”之前的其余子字符串应该是开头的辅音,因此0, i
而不仅仅是i
。总之,这给出了
outerloop:
for (int i = 0; i < word.length(); i++) {
for (int j = 0; j < 5; j++) {
if (word.charAt(i) == vowel[j]) {
word = word.substring(i) + word.substring(0, i) + "ay";
break outerloop;
}
}
}
答案 1 :(得分:2)
只需走一下String直到你碰到第一个元音,这将为你提供String.substring()
所需的索引值
只需将您的doStuff()方法改为:
public static void main(String[] args) throws Exception {
System.out.println(doStuff("laptop"));
System.out.println(doStuff("String"));
System.out.println(doStuff("apple"));
}
public static String doStuff(String word) {
String vowels = "aeiouAEIOU";
for (int i = 0; i < word.length(); i++) {
if (vowels.contains(""+word.charAt(i))) {
String prefix = word.substring(0, i);
String suffix = word.substring(i);
word = suffix + prefix + "ay";
break;
}
}
return word;
}
结果:
aptoplay
ingStray
appleay
答案 2 :(得分:1)
检查字符串的长度,检查“aeiou”是否是分割点处的字符之一。如果是,请相应地重新连接字符串,否则继续下一个字符。
String doStuff(string a)
{
char c;
string s = "aeiou" //y?
int i,l;
l=a.length();
for(i = 0;i < l;i++)
{
c=a.charAt(i);
if(s.contains(c))
break;
}
a=a.substring(i,l)+a.substring(0,i)+"ay";
return a;
}
答案 3 :(得分:1)
我是新来的,所以不太了解这些惯例。无论如何,下面的代码应该能够帮助您实现所需的转换。
使用元音列表为您提供'包含'操作,与嵌套循环相比,它允许更容易理解代码。但是在处理方面没有优势。
在以下代码中,inp是输入字符串。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class piglatin {
public static void main(String args[]) {
String[] vowels = new String[] { "A", "a", "E", "e", "I", "i", "O",
"o", "U", "u" };
List<String> vowelList = new ArrayList<String>(Arrays.asList(vowels));
String inp = "string";
String returnString = inp;
for (int i = 0; i < inp.length(); i++) {
if(vowelList.contains(""+inp.charAt(i))){
returnString = inp.substring(i)+inp.substring(0,i)+"ay";
break;
}
}
System.out.println(returnString);
}
}
编辑:没有意识到“.contains”可以与Strings一起使用,也可以由Shar1er80使用。现在不是关于学习的堆栈交换;)
答案 4 :(得分:0)
public static String pigLatin(String origianl){
List<Character> vowels = new ArrayList<>(5);
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');
boolean vowelFound;
for(int i = 0; i < origianl.length(); i++){
if(vowels.contains(origianl.toLowerCase().charAt(i))){
String post = origianl.substring(0, i);
String pre = origianl.substring(i);
return pre + post + "ay";
}
}
return null;
}
您不必使用该列表。还有很多其他选项(比如在||
语句中使用一堆if
)。此外,最好将List
置于方法之外,以便在每次调用方法时都不需要创建它。
答案 5 :(得分:0)
char[] ar = new char[] { 'u', 'o', 'i', 'e', 'a' };
string Word = "Hello";
int count=0;
for (int i = 0; i < Name.Length; i++)
{
for (int j = 0; j < ar.Length; j++)
{
if (Word[i] == ar[j])
{
count++;
Console.WriteLine("{0},{1}",Word[i], i);
break;
}
}
if (count==1)
{
break;
}