UPDATED ANSWERパラメータであり、使用されているものは、実際にしてPattern#compile
メソッドを呼び出しScanner#findWithHorizon、ありますフラグのセット(Pattern#compile(String, int))。
この結果は、ファイルの行で入力テキストにこのパターンを何度も繰り返し適用しているようです。これはパターンが一度に複数の行にマッチすることはできないと考えています。
したがって:完全性については
public static final String findInFile(final Path file, final String pattern,
final int flags)
throws IOException
{
final StringBuilder sb = new StringBuilder();
final Pattern p = Pattern.compile(pattern, flags);
String line;
Matcher m;
try (
final BufferedReader br = Files.newBufferedReader(path);
) {
while ((line = br.readLine()) != null) {
m = p.matcher(line);
while (m.find())
sb.append(m.group());
}
}
return sb.toString();
}
私はいくつかの時間前に任意の長さのテキストファイルがCharSequence
として読み取ることが、ここで大きな効果を使用することができたことができますパッケージを開発したことを追加する必要があります:https://github.com/fge/largetext。 Matcher
は、String
ではなく、CharSequence
と一致するため、ここではうまく動作します。しかし、このパッケージにはいくつかの愛が必要です。ファイルにマッチする文字列のList
を返す
一つの例は、指定できます
private static List<String> findLines(final Path path, final String pattern)
throws IOException
{
final Predicate<String> predicate = Pattern.compile(pattern).asPredicate();
try (
final Stream<String> stream = Files.lines(path);
) {
return stream.filter(predicate).collect(Collectors.toList());
}
}
出典
2016-08-20 12:21:00
fge
そして、あなたはその結果をどうするかをしたいですか?それらをリストで収集してください。 – fge