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