2017-06-25 9 views
2

私は同様の質問から以下の解決策を見つけました。regex - java-8でファイル内のパターンを見つける

Find pattern in files with java 8

Pattern p = Pattern.compile("is '(.+)'"); 
    stream1.map(p::matcher) 
     .filter(Matcher::matches) 
     .findFirst() 
     .ifPresent(matcher -> System.out.println(matcher.group(1))); 

これはkhelwoodによって与えられたソリューションです:ここにリンクがあります。これは私にとって非常に便利です。しかし、なぜ何も印刷されていないのはわかりません。

「is」という単語の後に続くものにマッチさせようとしています。

そして、私の入力ファイルには、これらの行が含まれています

my name is tom 
my dog is hom. 

私はStream#findFirstがあるので、あなたが結果のすべてを取得することはできません

tom 
hom. 

を印刷する必要がある。しかし何も

答えて

2

を印刷されません満足している最初の要素をストリームに返します。代わりにStream#forEachを使用してください。 Matcher#matches意志が入力全体にマッチするので

あなたは、シンボルのすべてが表示され、Matcher#findMatcher#matchesに代わるものではありません'を削除する必要があります。たとえば、

1

正規表現の単一引用符を削除するだけです。私はあなたが 'is'の後に何かをマッチさせたいと言ったので仮定しています。 'is'に続くものがないなら空白を表示したいかもしれません。したがって、私が使用した正規表現では '。*'の代わりに '。*'を使用します。

これは動作するはずです。

Pattern p = Pattern.compile("is (.*)"); 
    stream1.map(p::matcher) 
     .filter(Matcher::matches) 
     .filter(Matcher::find) 
     .forEach(matcher -> System.out.println(matcher.group(1))); 
+0

ありがとうございますが、まだ何も取得していません。 – Ilakk

+0

@llakk申し訳ありません。編集した回答を確認してください。 – Piyush

関連する問題