猪拉丁语翻译代码不起作用



我一直在做一个猪拉丁语翻译器,它基本上从用户的句子中裁剪出单个单词,将其传递给翻译方法,该方法将逐个字母地查找a,e,i,o,u来翻译单词。从理论上讲,我认为它会正常工作,但我的代码出了点问题。我认为这是charAt((的东西,但考虑到我使用各种子字符串,长度和索引相关的东西,它看起来很混乱。有人可以帮我修复我的代码吗?我也想知道是否有更好的方法来写这个。谢谢。

import java.util.*;
import static java.lang.System.*;
public class PigLatinTranslator {
public static Scanner scan = new Scanner(in);
public static void main(String args[]){
String translated = "";
out.println("Enter the sentence you want to translate");
String input = scan.nextLine ();
input = input.toUpperCase ();
while(input.length() > 0){
int a = input.indexOf (" ");
if (a == -1){
a = 1;
}
String stripped = input.substring (0, a);
input = input.substring (a+1, input.length());
translated += translator(stripped);
}
out.println(translated);
}
public static String translator(String input) {
int index = 0;
String implement, sum = "";
if(input.charAt (index) == 65 || input.charAt (index) == 69 || input.charAt (index) == 73 ||
input.charAt (index) == 79 || input.charAt (index) == 85){
input += "-ay ";
out.println(input);
return input;
}
while(input.charAt (index) != 65 && input.charAt (index) != 69 && input.charAt (index) != 73 &&
input.charAt(index) != 79 && input.charAt(index) != 85){
implement = Character.toString(input.charAt (index));
sum += implement;
index ++;
}
input = input.substring(index, input.length()) + "-" + sum + "ay";
return input;
}

}

这是您应该刚刚使用正则表达式的时间之一

public static void main(String[] args) {
System.out.println("Enter the sentence you want to translate");
String input = scan.nextLine();
StringBuilder builder = new StringBuilder();
for (String word : input.toUpperCase().split("\s+")) {
builder.append(translate(word)).append(' ');
}
String translated = builder.toString().trim();
System.out.println(translated);
}
public static String translate(String word) {
return word.replaceAll("(?i)\b([^aeiou]+)(\w+)", "$2-$1ay");
}

用简单的英语:将句子分成单词,取每个单词并将起始辅音移动到末尾,并附加一个"ay",然后重新连接单词。

PS:既然你是新手,我应该解释更多。基本上在Java中,有一些专门用于操作文本的特殊工具。其中两个是正则表达式和StringBuilder。构建像 Pig Latin 翻译器这样的东西的最简单方法是将字符串拆分为单词:String.split()拆分字符串,\s+表示在有空格的地方拆分。然后,使用正则表达式转换单词,并使用StringBuilder将它们重新连接在一起,就像您可以修改的字符串一样。

我使用的正则表达式是(?i)\b([^aeiou]+)(\w+)", "$2-$1ay的意思是:从单词(\b(的开头开始,找到不是(^(元音([aeiou]+(的字母,然后找到它们后面的所有字母(\w+(。当您找到这两个组($ 1 和 $2 (时,将 $1 移到末尾 ($2-$1(,并在它后面添加一个ay($2-$1ay(。

最新更新