Sha256: 911d221b8035ef55a6c6eb8654f08e581aa5309b19fe93fedea661809e2555ac

Contents?: true

Size: 1.87 KB

Versions: 89

Compression:

Stored size: 1.87 KB

Contents

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

Version data entries

89 entries across 89 versions & 1 rubygems

Version Path
trackler-2.2.1.13 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.12 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.11 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.10 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.9 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.8 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.7 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.6 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.5 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.4 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.3 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.2 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.1 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.1.0 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.0.6 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.0.5 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.0.4 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.0.3 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.0.2 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java
trackler-2.2.0.1 tracks/java/exercises/pig-latin/src/example/java/PigLatinTranslator.java