Показывает ли Matcher местонахождение матча Regex?

1

У меня есть формат файла, который я работаю над разбором, называемый форматом ADIF. Это может выглядеть примерно так:

<BAND:3>15M   <MODE:4>JT65

Есть 2 части информации, которые мне нужно извлечь из этого, для каждого набора. Тег, который находится внутри <>, и данные, находящиеся вне. Число после: указывает количество символов для чтения после >.

Я пытаюсь сделать это с помощью регулярного выражения, используя что-то похожее на это:

String tag=m.group();
String tagName=(String) tag.subSequence(1,tag.length()-1);
int cI=tag.indexOf(':');
String data="";
if (cI!=-1) {
    tagName=(String) tag.subSequence(1,cI);
    int numChar=Integer.parseInt((String) tag.subSequence(cI+1,tag.length()-1));
    int end=m.regionEnd()+1;
    data = (String) line.subSequence(end,end+numChar-1);
}

Проблема в том, что область, определенная Матчи, охватывает всю строку. Есть ли способ найти символы, где происходит совпадение?

Теги:
adif

1 ответ

1
Лучший ответ

Понял это сразу после публикации... Вздох.

Используйте функцию end() вместо regionEnd()

int end=m.end();

Таким образом, это делает окончательный код:

String tag=m.group();
String tagName=(String) tag.subSequence(1,tag.length()-1);
int cI=tag.indexOf(':');
String data="";
if (cI!=-1) {
    tagName=(String) tag.subSequence(1,cI);
    int numChar=Integer.parseInt((String) tag.subSequence(cI+1,tag.length()-1));
    int end=m.end();
    data = (String) line.subSequence(end,end+numChar);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню