public static final UnaryOperator encode_1 = in -> { int length = in.length(); if (length < 2) return in; StringBuilder out = new StringBuilder(length + 1); int counter = 0; int check; char compare; for (int place = 0; place < length; place++) { compare = in.charAt(place); check = place + 1; if (length > check && compare == in.charAt(check)) { counter++; continue; } if (counter == 0) out.append(compare); else if (counter == 1) { out.append(compare); out.append(compare); } else { out.append(counter + 1); out.append(compare); } counter = 0; } return out.toString(); }; public static final UnaryOperator decode_0 = in -> { int length = in.length(); if (length < 2) return in; StringBuilder out = new StringBuilder(length * 4); for (int count = 0; count < length; count++) { if (!Character.isDigit(in.charAt(count))) { out.append(in.charAt(count)); continue; } int start = count; while (Character.isDigit(in.charAt(count))) count++; for (int j = 0; j < Integer.parseInt(in.substring(start, count), 10); j++) out.append(in.charAt(count)); } return out.toString(); };