-2

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

}

4

1 回答 1

0

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

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)。

于 2018-05-11T08:06:07.800 回答