Код Pig Latin Translator не работает
Я делал переводчик латинского языка, который в основном вырезал отдельные слова из предложения пользователя, передавал его методу переводчика, который будет искать букву за буквой, чтобы перевести слово. Теоретически я думаю, что это будет работать нормально, но в моем коде что-то идет не так. Я думаю, что это функция 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 ответ
Это один из тех случаев, когда вы должны были просто использовать регулярные выражения
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
).