Sha256: 29cb6e72b6781a3cdbf9c9b804f5a02194053aa055a5332c71480d6452160f59

Contents?: true

Size: 1.83 KB

Versions: 107

Compression:

Stored size: 1.83 KB

Contents

import java.util.regex.Matcher;
import java.util.regex.Pattern;

class RunLengthEncoding {
    String encode(String data) {

        StringBuilder encodedDataBuilder = new StringBuilder();

        if (data.length() == 0) {
            return data;
        }

        int previousCharCount = 1;
        char previousChar = data.charAt(0);

        for (int i = 1; i < data.length(); i++) {
            char currentChar = data.charAt(i);

            if (previousChar == currentChar) {
                previousCharCount++;
            }

            if (previousChar != currentChar || i == data.length() - 1) {
                addChars(encodedDataBuilder, previousChar, previousCharCount);

                if (previousChar != currentChar && i == data.length() - 1) {
                    addChars(encodedDataBuilder, currentChar, 1);
                }

                previousChar = currentChar;
                previousCharCount = 1;
            }
        }

        return encodedDataBuilder.toString();
    }

    void addChars(StringBuilder toAddTo, char toAdd, int countOfChar) {
        if(countOfChar != 1) {
            toAddTo.append(countOfChar);
        }

        toAddTo.append(toAdd);
    }

    String decode(String encodedData) {
        StringBuilder decodedData = new StringBuilder();
        Pattern pattern = Pattern.compile("[0-9]+|[a-zA-Z\\s]");
        Matcher matcher = pattern.matcher(encodedData);

        while (matcher.find()) {
            try {
                int number = Integer.parseInt(matcher.group());

                matcher.find();

                for (int i = 0; i<number; i++) {
                    decodedData.append(matcher.group());
                }
            } catch (NumberFormatException e) {
                decodedData.append(matcher.group());
            }
        }

        return decodedData.toString();
    }
}

Version data entries

107 entries across 107 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.179 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.178 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.177 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.176 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.175 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.174 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.173 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.172 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.171 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.170 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.169 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.167 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.166 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.165 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.164 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.163 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.162 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.161 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java
trackler-2.2.1.160 tracks/java/exercises/run-length-encoding/.meta/src/reference/java/RunLengthEncoding.java