по правилам сжатия последовательность aaaabcc должна преобразоваться в 4ab2c (число показывает сколько повторяющихся символов, если символ один, то числа впереди нет) Имеется следующий код, решающий задачу распаковки
public void Parser(ActionEvent actionEvent) throws IOException {
String st="2a20bc";
final StringBuilder sb = new StringBuilder();
final char[] chars = st.toCharArray();
int i = 0;
while (i < chars.length)
{
int repeat = 0;
while ((i < chars.length) && Character.isDigit(chars[i]))
repeat = repeat * 10 + chars[i++] - '0';
final StringBuilder s = new StringBuilder();
while ((i < chars.length) && !Character.isDigit(chars[i]))
s.append(chars[i++]);
if (repeat > 0)
for (int j = 0; j < repeat; j++)
sb.append(s.toString());
else
sb.append(s.toString());
}
System.out.println(sb);}
Проблема в том, что не удаётся подхватить символы, не имеющие числа впереди (то есть при распаковке он так и остаётся в единственном числе) Например последовательность 2ab3c должна распаковаться как aabccc, а получается ababccc
Вот такое решение без регулярок:
private static String unpack(String s) {
StringBuilder counter = new StringBuilder();
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (Character.isDigit(s.charAt(i))) {
counter.append(s.charAt(i));
} else {
int lim = counter.length() == 0 ? 1 : parseInt(counter.toString());
for (int j = 0; j < lim; j++){
result.append(s.charAt(i));
}
counter = new StringBuilder();
}
}
return result.toString();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
При запуске тестов с MockMvc получаю ошибку: javalang