Pig Latin Translator код не работает - PullRequest
0 голосов
/ 11 мая 2018

Я делал переводчик латинского языка, который в основном вырезал отдельные слова из предложения пользователя, передавал его методу переводчика, который будет искать букву за буквой a, e, i, o, u перевести слово. Теоретически я думаю, что это будет работать нормально, но в моем коде что-то идет не так. Я думаю, что это функция charAt (), но она выглядит довольно грязно, учитывая, что я использую всевозможные подстроки, длину и индексы. Может ли кто-нибудь помочь мне исправить мой код? Я также хотел бы знать, есть ли лучший способ написать это. Спасибо в adv.

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;
}

}

1 Ответ

0 голосов
/ 11 мая 2018

Это один из тех случаев, когда вы должны были просто использовать регулярное выражение

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», а затем соедините слова.

П.С .: Поскольку вы новичок в этом, я должен объяснить больше. В основном в 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).

...