java - 猪拉丁语翻译代码不起作用
问题描述
我一直在做一个猪拉丁语翻译器,它基本上从用户的句子中裁剪出单个单词,将其传递给翻译方法,该方法将逐字母查找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
)。
推荐阅读
- arrays - Perl:用seek函数不能指向启动?
- html - 在 HTML 元素中显示 PDF 时出现沙盒错误
- c# - 从菜单列表创建面包屑
- reactjs - 获取静态内容时如何防止不必要的渲染?
- c++ - 堆块在 C++ 中修改了过去的请求错误
- java - 使用一条语句 JavaFX 为多个按钮设置颜色
- python - Numpy 2D 数组:我需要检查数组的前 n-2 个元素是否为 nan 并确保 n-1 不是
- python - IPython 魔术命令在 Python 控制台中有效,但在“运行”或“调试”脚本模式下无效
- r - 在 R 中选择性地使长格式 pivot_longer() tidyverse
- python - 使用 Metasploit 执行 Python 脚本