【问题标题】:Pig Latin Translator code not working猪拉丁语翻译代码不起作用
【发布时间】:2018-10-21 14:02:15
【问题描述】:

我一直在做一个猪拉丁语翻译器,它基本上从用户的句子中裁剪出单个单词,将其传递给翻译方法,它将逐个字母地查找 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;
}

}

【问题讨论】:

  • 你遇到了什么问题?
  • 编译器说字符串索引越界。根据编译器,我很确定它发生在翻译方法中,并且是由 charAt 命令引起的
  • 我想你会在底部while 中得到一个OOB 异常,因为你没有检查index 是否大于input 的长度。还有子字符串
  • @Ubuntu4EVA 你能用堆栈跟踪更新你的帖子吗?它应该包括一个行号,你要越界。
  • 我目前没有电脑,各位大佬能不能自己编译一下看看是什么问题?

标签: java string translators


【解决方案1】:

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

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”,然后重新加入单词。

P.S.:既然你是新手,我应该解释一下。基本上在 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)。

【讨论】:

  • 每次我忘记提及我是一个菜鸟(这在我的代码中可以很明显地看到)时,有人只是发布了一个我无法理解一半的代码。不过,谢谢你帮助我。
  • @Ubuntu4EVA 我已经解释了更多。
  • 这让它更清楚了,谢谢!虽然我更喜欢更简单的
  • 是否有机会修改我的代码以使其适用于任何句子?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多