【问题标题】:Get the offset of a string获取字符串的偏移量
【发布时间】:2011-07-15 15:49:57
【问题描述】:

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

例子:

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

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

【问题讨论】:

  • 您可能想再次拆分?
  • 我认为必须有另一个分隔符来分割每个元素中的值、偏移量、计数和哈希

标签: java arrays string offset


【解决方案1】:
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) 可以找出字符串的偏移量。它开始在给定的偏移量处搜索字符串。所以使用前一个字符串的偏移量将解决重复的问题。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,它会在字符串中获取它的第一个实例。
    【解决方案3】:

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

    【讨论】:

    • 我实际上正在重写我的代码以不包含正则表达式。由权力决定。 ;)
    • 但是 String.split(regex) 在后台使用 Pattern!
    【解决方案4】:

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

    或者,正如其他发帖人所建议的那样,使用 java.util.regex 类、Pattern 和 Matcher。

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 是的,正则表达式匹配的字符串的长度将是可变长度,因为它正在拾取可以变化的参数。即 HTML / CSS 颜色代码。
      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-07
        • 2015-05-18
        • 2019-12-07
        • 1970-01-01
        相关资源
        最近更新 更多