Групировка строк

272
14 июля 2017, 03:30

Всем Привет, есть текстовой файл, там хранится какой-то код, как можно сгруппировать например целый цикл for , или же if, while, а затем их записать в коллекцию

например есть такой файл который я прочитал и записал в массив:

0)Class A{
1)if(a>0){
2)a=a+1:
3)System.out.print(a);
4)}
5)if(a<0){
6)for(i=0; i<s.length; i++){
7)words.add(s[i]);
8)}
9)for(i=0; i<s.length; i++){
10)words.add(s[i]);
11)}
12)}
13)for(j=0; j<sap.length; j++){
14)Rep.add(s[i]);
15)System.out.println(s[i]);
16)}
17)for(j=0; j<sap.length; j++){
18)Rep.add(s[i]);
19)System.out.println(s[i]);
20)}
21)}

после перегруппировки он должен стать таким:

0)Class A{
1)if(a>0){
a=a+1:
System.out.print(a);
}
2)if(a<0){
3)for(i=0; i<s.length; i++){
words.add(s[i]);
}
4)for(i=0; i<s.length; i++){
words.add(s[i]);
}
}
5)for(j=0; j<sap.length; j++){
Rep.add(s[i]);
System.out.println(s[i]);
}
6)for(j=0; j<sap.length; j++){
Rep.add(s[i]);
System.out.println(s[i]);
}
}

каким образом это можно реализовать, у меня нет никаких идей, помогите

Answer 1

Изначально необходимо разобраться с логикой. Если я правильно понял, то задача состоит в следующем - свернуть блоки кода в одну ячейку массива.

  1. Блок кода начинается с заданных слов - if while for
  2. Обновленный блок необходимо записать в одну ячейку нового массива

Делаем за один проход, сложность алгоритма n. Идем по массиву и ищем по вхождению заданных слов, как только нашли нужное слово, начинаем считать скобки ("{", "}") блоков кода и добавлять строки в StringBuffer. Считываем пока не кончатся строки, или пока счетчик не станет равен нулю (открывающая скобка добавляет 1, закрывающая уменьшает на 1).

Если строки кончились раньше - ошибка, некорректный файл. Можно написать свое исключение и отлавливать. Когда счетчик упал в ноль, добавляем в новый массив участок кода одной ячейкой.

Answer 2

Решение в лоб. Проверяем по открывающейся фигурной скобке в конце строки и при наличии записываем в новый элемент листа:

List<String> lines = new ArrayList<>();  // лист со строками вашего файла
List<String> newLines = new ArrayList<>();
StringBuilder newLine = new StringBuilder();
for (String line : lines) {
    if (line.endsWith("{")) {
        if (newLine.length() > 0) {
            newLines.add(newLine.toString());
        }
        newLine = new StringBuilder(line);
    } else {
        newLine.append("\n").append(line);
    }
}
newLines.add(newLine.toString());

Проверить можно на Ideone.

READ ALSO
Не срабатывает onKey() во фрагменте

Не срабатывает onKey() во фрагменте

Есть отдельный класс CustomKeyboard в нем описан метод onKey c некоторыми клавишамиКогда я создаю объект этого класса во фрагменте, появляется моя...

279
Как изменить часть текста?

Как изменить часть текста?

Есть текст, загруженный из файла "text_inp"Нахожу в нем строку со словом "word" и читаю от конца слова до конца строки:

387
Проблема с разделителем(divider) в AnimatedExpandableListView

Проблема с разделителем(divider) в AnimatedExpandableListView

Нужно сделать разварачиваемый анимированый список я нашел вот этот код

270
Сохранять index текущей страницы

Сохранять index текущей страницы

Как можно во фрагменте сохранять его index?

322