У меня есть формат файла, который я работаю над разбором, называемый форматом 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);
}
Проблема в том, что область, определенная Матчи, охватывает всю строку. Есть ли способ найти символы, где происходит совпадение?
Понял это сразу после публикации... Вздох.
Используйте функцию 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);
}