获取字符串的偏移量

时间:2011-07-15 15:49:57

标签: java arrays string offset

我有一个Array Strings从缓冲区字符串中分离出来。现在,数组中的每个项都有一个{value, offset, count, & hash}。如何获取数组中项目的偏移量?

示例:

String buffer = aVeryLongString;
String[] splitStringArray = buffer.split(regex);

for(String s: splitStringArray) {   
    // Get the offset of each item
    // Do something
}

6 个答案:

答案 0 :(得分:2)

String.indexOf(String str)应该可以工作。

for(String s: splitStringArray) {
    System.out.println(buffer.indexOf(s));
}

答案 1 :(得分:2)

您可能希望使用正则表达式匹配器/模式类而不是String.split函数。使用Matcher类,您可以使用find()迭代匹配,并通过end()获取当前位置。

答案 2 :(得分:2)

String buffer = aVeryLongString;
String[] splitStringArray = buffer.split(regex);

int offset = -1;
for(String s: splitStringArray) {
    offset = buffer.indexOf(s, offset + 1); // avoid duplicates
    System.out.println(offset);
}

使用String.indexOf(String str, int offset)可以找出字符串的偏移量。它开始在给定的偏移处搜索字符串。因此,使用前一个字符串的偏移量将解决重复的问题。

答案 3 :(得分:0)

String.split()实际上并没有提供恢复此信息的方法(没有循环遍历数组并添加以前的长度)。如果您需要有关生成的子字符串的类似额外信息,可以尝试java.util.Scanner

或者,正如其他海报建议的那样,使用java.util.regex类,Pattern和Matcher。

答案 4 :(得分:0)

如果正则表达式总是匹配固定长度,那么偏移量将是前面字符串的长度加上分割字符串的长度的总和。

但如果正则表达式长度不固定......嗯,不是一个简单的问题。我想,你必须基本上重复分裂用来找到碎片的逻辑。

答案 5 :(得分:0)

说,您想要用空格字符拆分buffer。 (\S+代表非空白字符)

String buffer = aVeryLongString;
Pattern p = Pattern.compile("\\S+");
Matcher m = p.matcher(buffer);

while(m.find()) {
  String matchStr = m.group();
  int startOffset = m.start();
  int endOffset = m.end();
  System.out.println("[ " + matchStr + " " + Integer.toString(startOffset) + " " + Integer.toString(endOffset) + " ]");
}