Java, RLE-распаковка

78
20 мая 2021, 17:00

по правилам сжатия последовательность 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

Answer 1

Вот такое решение без регулярок:

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();
}
READ ALSO
String выход за пределы

String выход за пределы

Вопрос: Как создать проверку на выход за пределы длины строки?

81
Java сверка числа с фрагментом

Java сверка числа с фрагментом

имеется массив чисел

113
Ошибка java.lang.NoClassDefFoundError: org.springframework.web.servlet.DispatcherServlet

Ошибка java.lang.NoClassDefFoundError: org.springframework.web.servlet.DispatcherServlet

При запуске тестов с MockMvc получаю ошибку: javalang

123
Добавить список/массив TextView

Добавить список/массив TextView

Мне необходимо создать n TextViewСейчас я делаю это так:

89