import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class PigLatinTranslator {
public static final String AY = "ay";
public static final String THR = "thr";
public static final String SCH = "sch";
public static final String CH = "ch";
public static final String QU = "qu";
public static final String TH = "th";
public static final String QUAY = "quay";
public static final String XR = "xr";
public static final String YT = "yt";
public static final String VOWELS_REGEX = "[aeiou]";
public String translate(String sentence) {
List<String> translatedWords = Arrays.asList(sentence.split(" "))
.stream()
.map(x -> translateWord(x))
.collect(Collectors.toList());
return String.join(" ", translatedWords);
}
private String translateWord(String word) {
if (wordStartsWithVowelLike(word)) {
return word + AY;
}
if (wordStartsWithPrefixes(word, THR, SCH)) {
return word.substring(3) + word.substring(0, 3) + AY;
}
if (wordStartsWithPrefixes(word, CH, QU, TH)) {
return word.substring(2) + word.substring(0, 2) + AY;
}
if (wordStartsWithConsonantAndQu(word)) {
return word.substring(3) + word.toCharArray()[0] + QUAY;
}
return word.substring(1) + word.toCharArray()[0] + AY;
}
private boolean wordStartsWithVowelLike(String word) {
return word.startsWith(YT) || word.startsWith(XR) || word.substring(0, 1).matches(VOWELS_REGEX);
}
private boolean wordStartsWithPrefixes(String word, String... prefixes) {
return Arrays.stream(prefixes)
.anyMatch(word::startsWith);
}
private boolean wordStartsWithConsonantAndQu(String word) {
return word.substring(1).startsWith(QU);
}
}