lots of exercises in java... from https://github.com/exercism/java

PigLatin.java 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import java.util.Arrays;
  2. import java.util.List;
  3. import java.util.stream.Collectors;
  4. public class PigLatin {
  5. public static final String AY = "ay";
  6. public static final String THR = "thr";
  7. public static final String SCH = "sch";
  8. public static final String CH = "ch";
  9. public static final String QU = "qu";
  10. public static final String TH = "th";
  11. public static final String QUAY = "quay";
  12. public static final String XR = "xr";
  13. public static final String YT = "yt";
  14. public static final String VOWELS_REGEX = "[aeiou]";
  15. public static String translate(String sentence) {
  16. List<String> translatedWords = Arrays.asList(sentence.split(" "))
  17. .stream()
  18. .map(x -> translateWord(x))
  19. .collect(Collectors.toList());
  20. return String.join(" ", translatedWords);
  21. }
  22. private static String translateWord(String word) {
  23. if (wordStartsWithVowelLike(word)) {
  24. return word + AY;
  25. }
  26. if (wordStartsWithPrefixes(word, THR, SCH)) {
  27. return word.substring(3) + word.substring(0, 3) + AY;
  28. }
  29. if (wordStartsWithPrefixes(word, CH, QU, TH)) {
  30. return word.substring(2) + word.substring(0, 2) + AY;
  31. }
  32. if (wordStartsWithConsonantAndQu(word)) {
  33. return word.substring(3) + word.toCharArray()[0] + QUAY;
  34. }
  35. return word.substring(1) + word.toCharArray()[0] + AY;
  36. }
  37. private static boolean wordStartsWithVowelLike(String word) {
  38. return word.startsWith(YT) || word.startsWith(XR) || word.substring(0, 1).matches(VOWELS_REGEX);
  39. }
  40. private static boolean wordStartsWithPrefixes(String word, String... prefixes) {
  41. return Arrays.asList(prefixes).stream()
  42. .anyMatch(x -> word.startsWith(x));
  43. }
  44. private static boolean wordStartsWithConsonantAndQu(String word) {
  45. return word.substring(1).startsWith(QU);
  46. }
  47. }