java - 将用户输入转换为乱七八糟的布偶谈话

标签 java string if-statement replace str-replace

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

  • 将所有出现的“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);

最佳答案

我会使用不同的方法来解决这个问题。

使用 StringBuilderStringBuffer

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/

相关文章:

java - 覆盖 Eclipse 中的透视图

java - 尝试从 String 转换为 Int 会导致第一个字符为 '?'

php - 检查 Laravel View 中是否为 null 和空字符串

c - 检查变量是否为某物值的方法

java - 从元对象中创建对象变量

java - Java 中的 toString 覆盖

java - 如何在 spring boot 到达 Controller 之前修改请求体

C# 8 从字符串中获取最后 n 个字符的方法

Java:在 String 对象上同步

javascript - 为什么设置 input.value 等于空字符串不会删除最近按下的键?