java – 将用户输入转换为乱码muppet talk

我正试图将英语翻译成瑞典厨师的假语.优先顺序的语言规则如下:

>用“UN”替换所有出现的“AN”.
>用“OO”替换所有出现的“AU”.
>用“E”替换不在单词末尾的所有“A”.
>用“OO”替换所有出现的“OW”.
>将所有出现的“O”替换为“U”.
>用“EE”替换单词开头以外的第一个“I”.
>用“EE”替换单词末尾出现的所有“EN”.
>用“E-A”替换单词末尾出现的所有“E”.
>用“I”替换单词开头的所有“E”.
>用“OO”替换所有出现的“U”.

作者应该被翻译为OOTHOR,但我的代码将其翻译为UUTHOR.这是因为我的代码遵循第5条规则(当有“OO”时).

那么,如何仅在看到单个“O”而不是“OO”时才能应用第五个参数?

这是我的代码:

String entry;
String entry6;
String entry7;
String entry8;
String entry9;
String entry11;
String entry10;
String end;

System.out.println("WELCOME TO THE SWEDISH CHEF TRANSLATOR!");
Scanner scan = new Scanner(System.in);
System.out.print("Please enter a phrase in english: ");
entry = scan.next();

String entry1 = entry;
int length = entry1.length();
String entry4;

System.out.println("1: " + entry1);
// AN TO UN
String entry2 = entry.replace("AN", "UN");
System.out.println("2: " + entry2);

// AU TO OO
String entry3 = entry2.replace("AU", "OO");
System.out.println("3: " + entry3);

// A TO E
String lastL = entry3.substring(length - 1, length);
int index2 = lastL.indexOf("A");
if (index2 < 0) {
    entry4 = entry3.replace("A", "E");
} else {
    String beg = entry3.substring(0, length - 1);
    String replacedA = beg.replace("A", "E");
    System.out.print(replacedA);
    entry4 = lastL;
}
System.out.println("4: " + entry4);

// OW TO OO
String entry5 = entry4.replace("OW", "OO");
System.out.println("5: " + entry5);

// O TO U
entry6 = entry5.replace("O", "U");
System.out.println("6: " + entry6);

// I TO EE
String firstL = entry6.substring(0, 1);
int index3 = firstL.indexOf("I");
if (index3 < 0) {
    entry7 = entry6.replaceFirst("I", "EE");
} else {
    String endWord = entry6.substring(1, length);
    String replacedI = endWord.replaceFirst("I", "EE");
    entry7 = firstL + replacedI;
}
System.out.println("7: " + entry7);

// EN TO EE
length = entry7.length();
String En = entry7.substring(length - 2, length);
String substring2 = En.replace("EN", "EE");
entry8 = entry7.substring(0, length - 2) + substring2;
System.out.println("8: " + entry8);

// E to E-A
String lastL2 = entry8.substring(length - 1, length);
int index4 = lastL2.indexOf("E");
if (index4 < 0) {
    entry9 = entry8;
} else {
    String replacedE = lastL2.replace("E", "E-A");
    entry9 = entry8.substring(0, length - 1) + replacedE;
}
System.out.println("9: " + entry9);

// E TO I
String firstL2 = entry9.substring(0, 1);
length = entry9.length();
int index5 = firstL2.indexOf("E");

if (index5 < 0) {
    entry10 = entry9;
} else {
    end = entry9.substring(1, length);
    entry10 = "I" + end;
}
System.out.println("10:" + entry10);

// U to OO
entry11 = entry10.replace("U", "OO");
System.out.println("11:" + entry11);

最佳答案 我会用不同的方法来解决这个问题.

使用StringBuilder或StringBuffer.

StringBuilder target = new StringBuilder();

在输入字段中保留一个索引,以及告诉您是否位于新单词开头的标记.

int curr = 0;

现在扫描您的条目,首先检查双字母组合.如果它们匹配(包括单词开始/结束规则),则将相应的字符附加到目标变量,并将2添加到curr.

接下来检查单个字母.如果它们匹配,则将适当的字符附加到目标,并将1添加到curr.

如果不匹配,则将当前字符(entry.charAt(curr))附加到目标并将1添加到curr.

当你到达字符串的末尾时,将目标转换为String,你就完成了.

点赞