2

我有这样的 XPath:

something1/something2/AXES::tag/something3...

其中 AXES 是一组有限的单词:

  • 孩子
  • 属性
  • ...

所以我必须把这个 xpath 分成三个部分:

  1. 某事1/某事2/
  2. 轴::标签
  3. 某事3...

我怎样才能做到这一点?我意识到这很容易,但它应该尽可能快地工作。


我的解决方案(当然它不是最佳的):

private static String[] splitForFirstAxes(String s){
    String[] a = new String[3];
    int i = s.indexOf("::",0);
    if (0 > i ) return null;
    String part1 = s.substring(0, i);
    String part2 = s.substring(i+2);
    int part1LastsSlash = part1.lastIndexOf('/');
    int part2FirstSlash = part2.indexOf('/');
    a[0] = part1.substring(0, part1LastsSlash);// First part
    a[2] = part2.substring(part2FirstSlash+1);// Second part
    a[1] = part1.substring(part1LastsSlash+1) +"::" +part2.substring(0,part2FirstSlash);// Axes
    return a;
}
4

2 回答 2

0
String xpath = "something1/something2/AXES::tag/something3";
String[] parts = xpath.split("/");

通过索引访问每个部分:

System.out.println(parts[0] + parts[1]);
System.out.println(parts[2]);
System.out.println(parts[3]);

结果:

something1something2
AXES::tag
something3
于 2013-06-03T16:26:57.037 回答
0

这正是您正在寻找的:

String input = "something1/something2/AXES::tag/something3...";
String[] tokens = input.split("/");
List<String> resultList = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (String token : tokens) {
    if (token.contains("::")) {
        if (sb.length() > 0) {
            resultList.add(sb.append("/").toString());
        }
        resultList.add(token);
        sb = new StringBuilder();
    } else {
        if (sb.length() > 0) {
            sb.append("/");
        }
        sb.append(token);
    }
} 
if (sb.length() > 0) {
    resultList.add(sb.toString());
}
System.out.println(resultList);

输出:

[something1/something2/, AXES::tag, something3...]
于 2013-06-03T16:49:00.580 回答