我有一个我正在解析的文件格式,称为ADIF格式。它可能看起来像这样:
<BAND:3>15M <MODE:4>JT65
对于每组,我需要从中检索2条信息。标签位于&lt;&gt;内部,数据位于外部。 :后面的数字表示>
后要读取的字符数。
我正在尝试通过正则表达式执行此操作,使用类似这样的内容:
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);
}
问题是Matcher定义的Region覆盖整行。有没有办法找到匹配发生的字符?
答案 0 :(得分: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);
}