Более краткий способ группировки символов в строке

#java #roman-numerals

Вопрос:

Я практикуюсь в сложении римских цифр на Java. основываясь на правилах исключения вычитающей нотации, объединения, а затем группировки в эквиваленты с более высоким значением, вот как будет выглядеть «IV» «IV» :

  1. «IV» «IV»
  2. «IIII» «IIII»
  3. «ИИИИИИИ»
  4. «VIII» (преобразование 5 I «IIIII» в «V»)

Я использую приведенный ниже код, чтобы сгруппировать 8 I в «IIIII» и «III». Затем я могу преобразовать «IIIII» в «V» с помощью a Map (не показано). Может ли приведенный ниже код группировки быть написан с использованием Stream методов?

      private String[] group(String sortedRawSum) {
        List<String> groupedChars = new ArrayList<>();
        int i=0;
        while (i 5 < sortedRawSum.length()) {
            if ( sortedRawSum.substring(i, i 5).equals("IIIII") ) {
                groupedChars.add("IIIII");
                i  = 5;
                continue;
            }
            i  ;
        }
        if (i < sortedRawSum.length()) {
            groupedChars.add(sortedRawSum.substring(i));
        }

        return groupedChars.toArray(new String[0]);
    }
 

Комментарии:

1. Гарантируется ли, что параметр sortedRawSum -содержит только I s?

2. если я смогу понять только I s, я думал, что смогу адаптировать его, чтобы он был более общим?