获取字符串的偏移量

发布于 2024-11-24 08:04:03 字数 357 浏览 2 评论 0原文

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

例子:

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

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

I have an Array of Strings that was split from a buffer string. Now each item in the array has a {value, offset, count, & hash}. How can I get the offset of the item in the array?

Example:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

阿楠 2024-12-01 08:04:03
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) 可以找出字符串的偏移量。它开始在给定的偏移量处搜索字符串。因此,使用前一个字符串的偏移量将解决重复的问题。

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

Using String.indexOf(String str, int offset) you can find out the offset of a string. It starts searching for the string at the given offset. So using the offset of the previous string will solve the problem with the duplicates.

执笔绘流年 2024-12-01 08:04:03

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

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

String.indexOf(String str) should work.

for(String s: splitStringArray) {
    System.out.println(buffer.indexOf(s));
}
讽刺将军 2024-12-01 08:04:03

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

You might want to use the regex Matcher/Pattern classes instead of the String.split function. With the Matcher class you can iterate through matches with find() and get the current position via end().

┾廆蒐ゝ 2024-12-01 08:04:03

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

或者,正如其他海报之一所建议的,使用 java.util.regex 类、Pattern 和 Matcher。

String.split() doesn't really provide a way to recover this information (without looping through the array and adding previous lengths). If you need extra information like this about the resulting substrings, you might try java.util.Scanner.

Or, as one of the other posters suggested, use the java.util.regex classes, Pattern and Matcher.

困倦 2024-12-01 08:04:03

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

但如果正则表达式长度不固定......嗯,这不是一个简单的问题。我认为,你必须基本上重复 split 用于查找碎片的逻辑。

If the regex always matches a fixed length, then the offset would be the sum of the lengths of the preceding strings plus the length of the split string.

But if the regex length isn't fixed ... hmm, not an easy problem. You'd have to basically repeat the logic that split uses to find the pieces, I would think.

柳若烟 2024-12-01 08:04:03

假设您想用空格字符分割缓冲区。 (\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) + " ]");
}

Say, you want to split a buffer by whitespace characters. (\S+ stands for non-whitespace characters)

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) + " ]");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文