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

RunLengthEncoding.java 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3. public class RunLengthEncoding {
  4. public String encode(String data) {
  5. String encodedData = "";
  6. for(int i = 0; i < data.length(); i++) {
  7. char c = data.charAt(i);
  8. if(i != 0 && c == data.charAt(i - 1)) continue;
  9. int amt = 1;
  10. for(int j = i+1; j < data.length() && c == data.charAt(j); j++) {
  11. amt++;
  12. }
  13. if(amt == 1) encodedData += c;
  14. else encodedData += amt + Character.toString(c);
  15. }
  16. return encodedData;
  17. }
  18. public String decode(String encodedData) {
  19. String decodedData = "";
  20. Pattern pattern = Pattern.compile("[0-9]+|[a-zA-Z\\s]");
  21. Matcher matcher = pattern.matcher(encodedData);
  22. while (matcher.find()) {
  23. try {
  24. int number = Integer.parseInt(matcher.group());
  25. matcher.find();
  26. while (number-- != 0) {
  27. decodedData += matcher.group();
  28. }
  29. } catch(NumberFormatException e) {
  30. decodedData+=matcher.group();
  31. }
  32. }
  33. return decodedData;
  34. }
  35. }