2016-10-06 5 views
1

私は人の平均給与を計算し、毎月の控除額をテンプレートに印刷するJavaプログラムを作成しています。テンプレートはこのようなものです:次のテンプレートにはどのような種類の正規表現を使用しますか?

==============BILL============== 
| NAME: xXxX  BRANCH : xxx | 
|        | 
| Month 1 : xxx.xxx   | 
| Month 2 : xxxx.xx   | 
|  <other Months>   | 
| Month 12 : xxx.xx   | 
|        | 
|  TOTAL : ____________  | 
================================ 

私は要素を試してみて、キャプチャするために、次のパターンを使用しています:

//template is stored in string. 
String[] lines = msg.split("\n"); 
Pattern p = Pattern.compile("[xX\\._]+"); 
for(String line : lines){ 
    Matcher m = p.matcher(line); 
    if(m.find()){ 
     System.out.println(m.group()); 
    } 
    else{ 
     System.out.println("no match found..."); 
    } 
} 

私は取得しています出力はこのようなものです:

xXxX 
xxx.xxx 
xxxx.xx 
xxx.xx 
____________ 

しかし、私はブランチの 'xxx'に一致することができません。どのようにそのパターンを抽出するのですか?

答えて

0

変更

if(m.find()){ 
    System.out.println(m.group()); 
} 

NAMEとして

while(m.find()){ 
     System.out.println(m.group()); 
} 

BRANCHに同じライン上にあります。

Matcher#find()は、最初に一致する文字列を見つけます。すべて一致するものではありません。すべての試合を得るには、find()に何度も電話する必要があります。

+0

ありがとうございました!ちょっとしたフォローアップの質問 - これらの一致するトークンをどのように置き換えるのですか?私はRegExには比較的新しいので、嫌な音が出たら私を許してください –

+0

'stringToAlter.replace(m.group()、" WhateverAlterContent ")'; – Antoniossss

+0

以下は正しい方法ですか? for(...){ if(line [i] .contains( "somePattern")){ line [i] = line [i] .replace(m.group()、 "myReplacement"); } } –

関連する問題