Java在标记之间找到了起始位置
下面的代码可以找到标签之间的文本,例如Java在标记之间找到了起始位置,java,Java,下面的代码可以找到标签之间的文本,例如 但我试图找到找到的文本的开始和结束位置,例如,这个代码结果是: [apple, orange, pear] 我希望得到以下结果,而不是此结果: [5,9], //apple [33,38], //orange [44,47], //pear 代码: 试试这个: public static void main(String[] args) { final String str = "<tag>apple</tag>&l
但我试图找到找到的文本的开始和结束位置,例如,这个代码结果是:
[apple, orange, pear]
我希望得到以下结果,而不是此结果:
[5,9], //apple
[33,38], //orange
[44,47], //pear
代码:
试试这个:
public static void main(String[] args) {
final String str = "<tag>apple</tag><b>hello</b><tag>orange</tag><tag>pear</tag>";
System.out.println(Arrays.toString(getTagValues(str).toArray()));
}
private static final Pattern TAG_REGEX = Pattern.compile("<tag>(.+?)</tag>");
private static List<String> getTagValues(final String str) {
final List<String> tagValues = new ArrayList<String>();
final Matcher matcher = TAG_REGEX.matcher(str);
while (matcher.find()) {
String found = matcher.group(1);
int start = str.indexOf(found);
tagValues.add("[" + String.valueOf(start) + ", " + String.valueOf(start + found.length()) + "]");
}
return tagValues;
}
publicstaticvoidmain(字符串[]args){
最后一个字符串str=“applehelloorangepear”;
System.out.println(Arrays.toString(getTagValues(str.toArray()));
}
私有静态最终模式标记_REGEX=Pattern.compile((.+?));
私有静态列表getTagValues(最终字符串str){
最终列表tagValues=new ArrayList();
最终匹配器匹配器=TAG_REGEX.Matcher(str);
while(matcher.find()){
找到的字符串=matcher.group(1);
int start=str.indexOf(已找到);
tagValues.add(“[”+String.valueOf(start)+)、“+String.valueOf(start+found.length())+”)”;
}
返回标记值;
}
由于这是基于标记的输入,如xml
,因此可以使用SAX
解析或dom
解析技术
File inputFile = new File("input.txt");
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(inputFile);
getAttribute("tag");
查看完整详细信息如果不想使用正式解析器,可以修改代码
while (matcher.find()) {
//tagValues.add(matcher.group(1));
System.out.print("Start index: " + matcher.start(1));
System.out.println(" End index: " + matcher.end(1));
tagValues.add(String.format("[%d,%d]", matcher.start(1), matcher.end(1)));
}
不要使用正则表达式来解析XML,使用Java的XML解析基础设施。@tux world使用正则表达式进行这种解析是一种不好的做法,使用XML解析这是非常简单和基本的概念java@tux-这是可行的,但在处理标记时需要避免使用正则表达式
File inputFile = new File("input.txt");
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build(inputFile);
getAttribute("tag");
while (matcher.find()) {
//tagValues.add(matcher.group(1));
System.out.print("Start index: " + matcher.start(1));
System.out.println(" End index: " + matcher.end(1));
tagValues.add(String.format("[%d,%d]", matcher.start(1), matcher.end(1)));
}