Java получает суб-контент из ArrayList - PullRequest
0 голосов
/ 28 августа 2018

это очень сложно. Я создаю графический интерфейс, который будет принимать текстовый файл, и когда я нажимаю кнопку «Пуск», он запускает функцию «BufferReader» для чтения всех строк из файла в ArrayList с именем «list». После этого мне нужно перехватить все строки из «списка» массивов, который начинается с букв «CE-», затем использовать следующие индексы «списка» массивов, пока код снова не получит строку, начинающуюся с «CE-». буквы. Все строки между "CE-" необходимо добавить в новый ArrayList с именем "CE".

  • все строки, начинающиеся с букв "CE-", являются заголовками.
  • все строки, которые между индексами, которые содержат "CE-", являются моими параметрами.
  • файл содержит другие заголовки, не только "CE -"

Вот небольшая часть текстового файла:

CE-system-components-accessmanager:
   Access control enable                             ,disabled
   Access policy prototyping                         ,enabled
   Access user group                                 ,enabled
   Implicit roles access policy                      ,disabled
   World access policy                               ,disabled

CE-system-components-eqlog:
   EquipmentLog Enable                               ,false

CE-system-components-eventlog:
   Eventlog Enable                                   ,false

и вот часть кода, которая должна получить строки в индексах между "CE-":

            for(String s : list) {
                if(s.contains("CE-")){
                    int idx = (list.indexOf(s))+1;
                    String txt = list.get(idx);
                    System.out.println(txt);
                    CE.add(txt);
                }
            }          
            System.out.println(CE);

мой вывод из этого куска кода это только первый параметр.

 Access control enable                             ,disabled
 EquipmentLog Enable                               ,false
 Eventlog Enable                                   ,false

У меня вопрос, как получить все параметры? Я пробовал некоторые коды, но это не сработает.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Этот код использует логическое значение inCE для отслеживания линии в блоке CE. Значение true, когда видна строка «CE-», и false, если видна пустая строка.

boolean inCE = false;

for (String line : lines) {
   if (line.contains("CE-")) {
     inCE = true;
   }
   else if (line.trim().isEmpty()) {
     inCE = false;
   }
   else if (inCE) {
     System.out.println(line);
     CE.add(line);
   }
}
0 голосов
/ 28 августа 2018

Вы можете начать с создания функции для проверки начала строки с другой строкой.

startsWith (start, string) {
 for (let i = 0; i < start.length; i++)
  if (start[i] !== string[i])
    return false

 return true
}

Делайте это для каждой строки, когда вы достигнете строки "CE-", начните добавлять строки в ваш массив. Вы также должны знать, какой элемент char находится в начале параметров. Для меня это выглядит как вкладка '\ t'.

addLines (strArray) {
  let start = "CE-"
  let paramStart = '\t'
  let resultArr = []
  let addMode = false

  for (let i = 0; i < strArray.length; i++) {
    if (addMode) {
     if (paramStart === strArray[i][0]) // Check if its a Param line
       resultArr.push(strArray[i])
     else
       addMode = false //Means that you found a new Title, but you still 
                       dont know
                       // if it is a "CE-"
    }

     if(!addMode) // Prevent that you check for Titles when adding param
      if (startsWith(start, strArray[i])) 
       addMode = true                     
  }

  return resultArr
}

if(addMode) и if(!addMode) могут выглядеть плохо, но они все еще нужны. Когда вы добавляете параметры, вы не знаете, когда появится следующий заголовок, поэтому вам все равно нужно проверить эту строку в том же взаимодействии. Вот почему это не if else утверждение

Полагаю, это так. Я не проверял это, но даже если это не идеально, я думаю, это могло бы указать вам правильное направление. Извините, я сделал все в Javascript , но вы поняли идею. : P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...