Расширить диапазон номеров - PullRequest
1 голос
/ 29 октября 2019

Я пытался решить проблему, которая беспокоит меня некоторое время. Я создал небольшой парсер, который читает файл .ini, а затем сохраняет данные в ArrayList. Тем не менее, я застрял со следующим фрагментом:

while (!(sCurrentLine.equals("[End]"))) {
    formats.add(sCurrentLine);
    for (int i = 0; formats.size() > 0; i++) {

    }
    sCurrentLine = br.readLine();
}

Теперь это место, где я должен добавить значения в formats, который имеет тип ArrayList. Значения, которые будут добавлены следующим образом:

0900.013-017=LABEL
0900.018-029=LABEL

Теперь диапазон находится между ними, и я также должен убедиться, что '0900' и '= label' повторяются вместе с расширением чисел, дляпример:

0900.013=LABEL
0900.014=LABEL
0900.015=LABEL
0900.016=LABEL and so on...

и сохраните его обратно в ArrayList.

Я не хочу зависеть от сторонних библиотек. Пожалуйста, помогите мне с этим.

1 Ответ

1 голос
/ 29 октября 2019

Используйте регулярное выражение для разбора диапазона, а затем переберите проанализированные значения. Необходимо выполнить некоторые тонкие настройки, но я думаю, что это должно помочь вам начать.

    Pattern rangePattern = Pattern.compile("([0-9]+)\\.([0-9]+)-([0-9]+)=(.*)$");
    Matcher rangeMatcher = rangePattern.matcher("0900.13-17=First label");

    if (rangeMatcher.matches()) {

        String prefix = rangeMatcher.group(1);
        int start = Integer.parseInt(rangeMatcher.group(2));
        int end = Integer.parseInt(rangeMatcher.group(3));
        String label = rangeMatcher.group(4);

        for (int r = start; r < end; r++) {
            System.out.println(prefix + "." + r + "=" + label);
        }
    }

Создайте шаблон один раз, а затем просто получайте новые совпадения каждый раз через цикл.

Результаты:

0900.13=First label
0900.14=First label
0900.15=First label
0900.16=First label
...