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

时间:2011-08-09 09:13:41

标签: java

我想要开始和结束以下文字索引......

这里的开始是固定的,但结尾的单词不是固定的..结束是到了行结束......

行是:

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

我可以找到起始索引但是如何找到结束索引......因为它没有修复。

5 个答案:

答案 0 :(得分:2)

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

示例代码

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

<强>输出:

  

发现词心血管起始指数:0,结束指数:14
  在起始索引处找到单词ROS:15,结束索引:18
  找到单词Neurological at start index:19,end index:31

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

答案 1 :(得分:0)

如果您将该行存储为String,则yourString.indexOf(yourString.substring(yourString.length-1));

答案 2 :(得分:0)

如果你想要String类型行中最后一个字符的索引,那么index = line.length() - 1。

答案 3 :(得分:0)

您可以使用字符串标记生成器将字符串转换为标记并取出第一个标记并循环遍历标记,直到到达最后一个标记。

<强>代码

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

答案 4 :(得分:0)

我不确定您想要获得什么,但如果它是每行":"之间的最后一个有效字符串。

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

found: Neurological line-index: 19 text index: 19
found: XYZ line-index: 19 text index: 52
found: ABC line-index: 19 text index: 76