Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java在标记之间找到了起始位置_Java - Fatal编程技术网

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)));
}