如何在java中查找行的结束索引

如何在java中查找行的结束索引,java,Java,我想开始和结束以下文本索引 这里的起始词是固定的,但结束词是不固定的。结束词是到行尾 行是: Cardiovascular:ROS:Neurological: Cardiovascular:ROS:XYZ: Cardiovascular:ROS:ABC::: 我可以找到起始索引,但如何找到结束索引..因为它不是固定的。如果将该行存储为字符串,则yourString.indexOf(yourString.substring(yourString.length-1))如果您使用正则表达式匹配器,它

我想开始和结束以下文本索引

这里的起始词是固定的,但结束词是不固定的。结束词是到行尾

行是:

Cardiovascular:ROS:Neurological:
Cardiovascular:ROS:XYZ:
Cardiovascular:ROS:ABC:::

我可以找到起始索引,但如何找到结束索引..因为它不是固定的。

如果将该行存储为
字符串,则
yourString.indexOf(yourString.substring(yourString.length-1))

如果您使用正则表达式匹配器,它将为您提供每个匹配的开始和结束索引

示例代码

// move this to a constant
final Pattern pattern = Pattern.compile(
        "\\b  # word boundary (start of word) \n" +
        "\\w+ # one or more word characters \n" +
        "\\b  # another word boundary (end of word)", Pattern.COMMENTS);

final String line = "Cardiovascular:ROS:Neurological:";
final Matcher matcher = pattern.matcher(line);
while(matcher.find()){
    System.out.println("Found word "+matcher.group()+" at start index: "+matcher.start()+ ", end index: "+matcher.end());
}
import java.util.StringTokenizer;
public class App {

    static String in = "Cardiovascular:ROS:Neurological:";
    static String in2 = "Cardiovascular:ROS:XYZ:";
    static String in3 = "Cardiovascular:ROS:ABC:::";

    public static void main(String[] args) {
        StringTokenizer st = new StringTokenizer(in2, ":");
        if(st.hasMoreTokens()) {
            String first = st.nextToken();
            for (int i = 0; i < st.countTokens()-1; i++) {
                st.nextToken();
            }
            String last = st.nextToken();
            System.out.println(first + " " + last);
            System.out.println(in2.indexOf(last));
        }
    }
}
输出:

在开始索引为0,结束索引为14时找到单词 在起始索引:15,结束索引:18处找到单词ROS
在开始索引:19,结束索引:31时找到单词


如果需要列索引,请每行使用一个匹配器,但如果需要从字符串开头开始的索引,请不要拆分行,而是在整个字符串上运行匹配器。

如果需要字符串类型行中最后一个字符的索引,则index=line.length()-1.

您可以使用字符串标记器将字符串转换为标记,并在第一个标记中循环,直到到达最后一个标记

代码

// move this to a constant
final Pattern pattern = Pattern.compile(
        "\\b  # word boundary (start of word) \n" +
        "\\w+ # one or more word characters \n" +
        "\\b  # another word boundary (end of word)", Pattern.COMMENTS);

final String line = "Cardiovascular:ROS:Neurological:";
final Matcher matcher = pattern.matcher(line);
while(matcher.find()){
    System.out.println("Found word "+matcher.group()+" at start index: "+matcher.start()+ ", end index: "+matcher.end());
}
import java.util.StringTokenizer;
public class App {

    static String in = "Cardiovascular:ROS:Neurological:";
    static String in2 = "Cardiovascular:ROS:XYZ:";
    static String in3 = "Cardiovascular:ROS:ABC:::";

    public static void main(String[] args) {
        StringTokenizer st = new StringTokenizer(in2, ":");
        if(st.hasMoreTokens()) {
            String first = st.nextToken();
            for (int i = 0; i < st.countTokens()-1; i++) {
                st.nextToken();
            }
            String last = st.nextToken();
            System.out.println(first + " " + last);
            System.out.println(in2.indexOf(last));
        }
    }
}
import java.util.StringTokenizer;
公共类应用程序{
静态字符串in=“心血管:ROS:神经:”;
静态字符串in2=“心血管:ROS:XYZ:”;
静态字符串in3=“心血管:ROS:ABC::”;
公共静态void main(字符串[]args){
StringTokenizer st=新的StringTokenizer(in2,“:”);
如果(st.hasMoreTokens()){
String first=st.nextToken();
对于(int i=0;i
我不确定您想要得到什么,但它是否是
之间的最后一个有效字符串:“
每行

String source = "Cardiovascular:ROS:Neurological:" + "\n" +
        "Cardiovascular:ROS:XYZ:"                  + "\n" +
        "Cardiovascular:ROS:ABC:::"                + "\n" ;

BufferedReader reader = new BufferedReader(new StringReader( source ));

while( true ) {
    String line = reader.readLine();
    if(line == null) {
        break;
    }
    String[] split = line.split( ":" );
    for( int i = split.length; i >= 0; i-- ) {
        String part = split[i-1];
        if(!part.isEmpty()){
            int lineIndex  = line.lastIndexOf( part );
            int lineOffset = source.lastIndexOf( line );
            System.out.println("found: "+part+ " line-index: "+lineIndex+ " text index: "+(lineOffset+lineIndex));
            break;
        }
    }
}
reader.close();
出去


那么,在这三个例子中,你到底需要什么呢?这只是段落的一部分……我有完整的文档,其中有一行包含上面的字符串(不像上面讨论的那样固定)。