我正在尝试将英语翻译成瑞典厨师的假语言。优先顺序的语言规则如下:
- 将所有出现的“AN”替换为“UN”。
- 将所有出现的“AU”替换为“OO”。
- 将所有不在单词末尾的“A”替换为“E”。
- 将所有出现的“OW”替换为“OO”。
- 用“U”替换所有出现的“O”。
- 用“EE”替换单词开头以外第一次出现的“I”。
- 将单词末尾出现的所有“EN”替换为“EE”。
- 将单词末尾出现的所有“E”替换为“E-A”。
- 将单词开头出现的所有“E”替换为“I”。
- 将所有出现的“U”替换为“OO”。
AUTHOR 应该翻译成 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;
现在扫描您的条目,首先检查双字母组合。如果它们匹配(包括单词开始/结束规则),则将适当的字符附加到 target
变量,并将 2 添加到 curr
。
接下来检查单个字母。如果它们匹配,则将适当的字符附加到 target
,并将 1 加到 curr。
如果没有匹配,则将当前字符 (entry.charAt(curr)
) 附加到 target
并将 1 加到 curr。
当您到达字符串的末尾时,将target
转换为String,您就完成了。
关于java - 将用户输入转换为乱七八糟的布偶谈话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317464/