Java 将用户输入转换为胡言乱语的木偶对话

Java 将用户输入转换为胡言乱语的木偶对话,java,string,if-statement,replace,str-replace,Java,String,If Statement,Replace,Str Replace,我想把英语翻译成瑞典厨师的假语言。按优先顺序排列的语言规则如下: 将所有出现的“AN”替换为“UN” 将所有出现的“AU”替换为“OO” 将不在单词末尾出现的所有“A”替换为“E” 将所有出现的“OW”替换为“OO” 将所有出现的“O”替换为“U” 将单词开头以外的第一个出现的“I”替换为“EE” 将单词末尾出现的所有“EN”替换为“EE” 将单词末尾出现的所有“E”替换为“E-a” 将单词开头出现的所有“E”替换为“I” 将所有出现的“U”替换为“OO” 作者应该被翻译成Outhor,但我

我想把英语翻译成瑞典厨师的假语言。按优先顺序排列的语言规则如下:

  • 将所有出现的“AN”替换为“UN”
  • 将所有出现的“AU”替换为“OO”
  • 将不在单词末尾出现的所有“A”替换为“E”
  • 将所有出现的“OW”替换为“OO”
  • 将所有出现的“O”替换为“U”
  • 将单词开头以外的第一个出现的“I”替换为“EE”
  • 将单词末尾出现的所有“EN”替换为“EE”
  • 将单词末尾出现的所有“E”替换为“E-a”
  • 将单词开头出现的所有“E”替换为“I”
  • 将所有出现的“U”替换为“OO”
作者应该被翻译成Outhor,但我的代码将其翻译成UUTHOR。这是因为我的代码遵循第五条规则(当存在“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);
字符串输入;
字符串入口6;
字符串入口7;
字符串入口8;
字符串入口9;
弦入口11;
字符串入口10;
弦端;
System.out.println(“欢迎来到瑞典厨师翻译!”);
扫描仪扫描=新扫描仪(System.in);
System.out.print(“请用英语输入短语:”);
entry=scan.next();
字符串entry1=条目;
int length=entry1.length();
字符串入口4;
System.out.println(“1:+entry1”);
//联合国秘书处
字符串entry2=entry.replace(“AN”,“UN”);
System.out.println(“2:+entry2”);
//乌托乌
字符串entry3=entry2.replace(“AU”、“OO”);
System.out.println(“3:+entry3”);
//A到E
String lastL=entry3.substring(长度-1,长度);
int index2=最后一个indexOf(“A”);
if(index2<0){
条目4=条目3.替换(“A”、“E”);
}否则{
字符串beg=entry3.子字符串(0,长度-1);
字符串replacedA=beg.replace(“A”、“E”);
系统输出打印(replacedA);
entry4=lastL;
}
System.out.println(“4:+entry4”);
//从OW到OO
字符串entry5=entry4.replace(“OW”、“OO”);
System.out.println(“5:+entry5”);
//O到U
条目6=条目5.替换(“O”、“U”);
System.out.println(“6:+entry6”);
//我喜欢看电影
stringfirstl=entry6.substring(0,1);
int index3=firstL.indexOf(“I”);
if(index3<0){
entry7=entry6.replaceFirst(“I”、“EE”);
}否则{
String endWord=entry6.子字符串(1,长度);
字符串replacedI=endWord.replaceFirst(“I”、“EE”);
entry7=第一个L+replacedI;
}
System.out.println(“7:+entry7”);
//恩托伊
length=entry7.length();
String En=entry7.子字符串(长度-2,长度);
字符串子字符串2=En.replace(“En”,“EE”);
entry8=entry7.子字符串(0,长度-2)+子字符串2;
System.out.println(“8:+entry8”);
//E到E-A
String lastL2=entry8.substring(长度-1,长度);
int index4=lastL2.indexOf(“E”);
如果(index4<0){
entry9=entry8;
}否则{
字符串replacedE=lastL2.replace(“E”,“E-A”);
entry9=entry8.子串(0,长度-1)+replacedE;
}
System.out.println(“9:+entry9”);
//E到I
stringfirstl2=entry9.substring(0,1);
length=entry9.length();
int index5=firstL2.indexOf(“E”);
如果(index5<0){
entry10=entry9;
}否则{
结束=入口9.子字符串(1,长度);
entry10=“I”+结束;
}
System.out.println(“10:+entry10”);
//U to OO
entry11=entry10.替换(“U”、“OO”);
System.out.println(“11:+entry11”);

将字符串的转换部分复制到新字符串中,并不断增加原始字符串的起点。 否则,它将继续替换字符串的转换部分

简单算法(未测试):

output=“”
x=0

对于(i=0;i,我将使用不同的方法来处理这个问题

使用
StringBuilder
StringBuffer

StringBuilder target = new StringBuilder();
在输入字段中保留一个索引,以及告诉您是否位于新词开头的标志

int curr = 0;
现在扫描您的条目,首先检查双字母组合。如果它们匹配(包括单词开头/结尾规则),请将适当的字符附加到
target
变量,然后将2添加到
curr

接下来检查单个字母。如果它们匹配,请将相应的字符附加到
target
,并将1添加到curr

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


当您到达字符串末尾时,将
目标
转换为字符串,您就完成了。

在另一个变量中保留文本的副本。每次替换第一个文本中的字符时,您都会将副本中的对应字符替换为
%
。如果对应的字符副本中的ter不是
%
。如果您将其添加到代码中,它将不费吹灰之力地工作。

您的代码有什么问题吗?Du unverses tu thees qooesshun需要加密吗?Bork Bork Bork!您可以使用hashmap数据结构吗?(可能不可以)所有内容不应该都是“Bork,Bork,Bork?”@MarsAtomic-什么???你能再澄清一点吗?对不起,我是compsci 2课程的初学者。
int curr = 0;