有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获取字符串的偏移量

我有一个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
}

共 (6) 个答案

  1. # 1 楼答案

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

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

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

    使用^{}可以找出字符串的偏移量。它开始搜索给定偏移量处的字符串。因此,使用前一个字符串的偏移量将解决重复的问题

  3. # 3 楼答案

    您可能希望使用正则表达式匹配器/模式类而不是字符串。分割功能。使用Matcher类,您可以使用find()迭代匹配,并通过end()获取当前位置

  4. # 4 楼答案

    比如说,您想用空格字符分割一个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) + " ]");
    }
    
  5. # 5 楼答案

    绳子。indexOf(字符串str)应该可以工作

    for(String s: splitStringArray) {
        System.out.println(buffer.indexOf(s));
    }
    
  6. # 6 楼答案

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

    或者,正如其他海报所建议的,使用java。util。正则表达式类、模式和匹配器