我有一个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
}
答案 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) + " ]");
}