2017-03-26 14 views
-1

こんにちは、StackOverFlowの素敵な人。1つの文字から別の文字への部分文字列

ちょうどので、私はJavaで解決するためにかなり簡単な問題であると思うだろうかに関して、助けを必要としていることであることを起こりました。

私はこのようなlookesテキストの40 000行の文書を持っています。

<syn level="3.3"><w1>wordOne</w1><w2>WordTwo</w2></syn> 
<syn level="4.3"><w1>WordThree</w1><w2>WordFour</w2></syn> 
<syn level="3.3"><w1>wordFive</w1><w2>WordSix</w2></syn> 

などである。私ができることをしたいのは、左側の言葉を取り出してそれらをすべて配列に入れ、同じことが権利のために行くことです。

私はこのような何かを見て解決策を考え出しました。

for(int i = 0; i < lines.size();i++){ 

     int iEnd = lines.get(i).indexOf('€'); 

     firstWord.add(lines.get(i).substring(21, iEnd)); 
    } 

    <syn level="3.3"><w1>wordOne€</w1><w2>WordTwo</w2></syn> 

しかしこれは、座って、80 000€」を書くために私を強制すると、それを行うためのより良い方法がなければならないようにそれだけで感じています。

+0

。 –

+1

XMLを含む文書がある場合は、XMLパーサーを使用することを検討してください。 RegExpは危険なほど強力です。 – Matt

答えて

0

なぜだろうを実行し、各ラインのためにその後Pattern

Pattern c = Pattern.compile("<w1>(\\w+)<\\/w1><w2>(\\w+)<\\/w2>"); 

を作成単語の最後に「€」を手動で追加したいのですか?あなたは既に言葉はあなたがこの

int iEnd = lines.get(i).indexOf("</w1>"); 

のようなものを書いて、それは、それは問題ないはずですように、コードの残りの部分を残すことができ</w1>

で終わることを知っています。 [正規表現](https://docs.oracle.com/javase/tutorial/essential/regex/)で読む

+0

ああそうですか?それはパラメータとしてcharを取っただけですが、 –

+0

それは両方を受け入れます。あなたはそれがこのhttps://docs.oracle.com/javase/7/docs/api/java/lang/String.htmlから受け入れ何パラメータチェックして、あなたはこれがあなたの質問に答えると思われる場合のindexOf –

+0

を検索することができ、マークしてくださいそれは受け入れられた答えとして。 –

0

なぜ、このような正規表現を使用しないでください:

<w1>(\w+)<\/w1><w2>(\w+)<\/w2> 

まず、整合

Matcher m = c.matcher(line); 
while (m.find()) { 
    System.out.println(m.group(1)); 
    System.out.println(m.group(2)); 
} 
関連する問題