Java の Matcher クラスを使用していくつかの文字列を取得しています。一致する文字列を取得すると、開始インデックスと終了インデックスも見つかります。今、私がやりたいのは、xの前後の文字を取得することです。
{begin index minus
だから私がしたことは、 x}
to {end index plus
xを使用して文字列の部分文字列メソッドを呼び出すだけでした}
が、少し重いようです。一致するたびに、そのコンテキストの文字列をループする必要があります。
それを行うためのより良い方法があるかどうかを知りたかったのです。
これが私がこれまでに行ったことです: 私を悩ませている部分はtext.substring
、どのくらい高価ですか?
String text = "Some 22 text with 44 characters";
Matcher matcher = Pattern.compile("\\d{2}").matcher(text);
int x = 5;
while (matcher.find()) {
String match = matcher.group();
int start = matcher.start();
int end = matcher.end();
String pretext = text.substring(start - x, start);
String postext = text.substring(end, end + x);
System.out.println(pretext + " - " + match + " - " + postext);
}
これを解決するためにグループ化を使用することの推奨される答え: regex (.{5})(\d{2}(.{5})
. まず、これは少なくとも 5 文字前にないものをキャプチャすることはできません。したがって、その解決策は(.{0,5})(\d{2})(.{0.5})
、その単純な正規表現には非常に適していますが、 (\d{2})
「」のようなものc?at
と指定されたテキスト「cat」の場合、これはグループに一致します
- c
- で