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

PigLatinTranslator.java 1.8KB

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