2011-08-09 6 views
0

の行のインデックスを終了私は開始したいとテキストの下のインデックスを終了...ここ...件までラインが終了されているJava

固定されて起動するが、言葉がfixed..endingされていないエンディング検索する方法

ラインは次のとおりです。

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

私はインデックスを開始見つけることができますが、それが固定されていないindex..asを終了見つける方法。

+5

アウト

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

これは段落のほんの一部であり、まさにあなたはこれらの三つの例に必要なのですか –

+0

文字列の上に含まれている1行があるという点でそう...私は(文書全体を持っています上記のように固定されていない)。 – Sweety

答えて

0

あなたが正規表現マッチャーを使用する場合は、その後、yourString.indexOf(yourString.substring(yourString.length-1));

2

Stringとしてその行を格納している場合、それは各試合の開始時刻と終了インデックスを提供します。

サンプルコード

// 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
発見された単語開始インデックスでの神経学:19、終了指数:31

列インデックスが必要な場合は、行ごとに1つのMatcherを使用しますが、文字列の先頭からインデックスが必要な場合は、行を分割しないで、文字列全体でMatcherを実行します。

0

あなたはString型の行の最後の文字のインデックスをしたい場合は、インデックス= line.length() - 1

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

私はあなたが取得したいのかわからないのですが、それは、各ラインの":"間の最後の有効な文字列である場合。

found: Neurological line-index: 19 text index: 19 
found: XYZ line-index: 19 text index: 52 
found: ABC line-index: 19 text index: 76 
関連する問題