[解決済み] 正規表現のマッチ数を数えるにはどうすればよいですか?
2022-09-25 02:17:54
質問
例えば、以下のような文字列があるとします。
HelloxxxHelloxxxHello
Hello'を探すパターンをコンパイルしています。
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher("HelloxxxHelloxxxHello");
3つのマッチが見つかるはずです。何件マッチしたかを知るにはどうしたらよいですか?
いろいろなループを試しましたし、また
matcher.groupCount()
を使ったりしましたが、うまくいきませんでした。
どのように解決するのですか?
matcher.find()
が見つかりません。
すべて
のみがマッチし
次
だけがマッチします。
Java 9+の解決策
long matches = matcher.results().count();
Java 8 以前のバージョンに対する解決策
以下のようにする必要があります。( Java 9 からは、よりすっきりした解決方法があります )
int count = 0;
while (matcher.find())
count++;
ブツブツ
matcher.groupCount()
は全く別のものです。
完全な例 :
import java.util.regex.*;
class Test {
public static void main(String[] args) {
String hello = "HelloxxxHelloxxxHello";
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher(hello);
int count = 0;
while (matcher.find())
count++;
System.out.println(count); // prints 3
}
}
重複するマッチの処理
のマッチをカウントする場合
aa
で
aaaa
とすると、上記のスニペットでは
2
.
aaaa
aa
aa
3件マッチするように、つまりこのような動作になります。
aaaa
aa
aa
aa
インデックスで一致するものを検索する必要があります。
<start of last match> + 1
を以下のように検索します。
String hello = "aaaa";
Pattern pattern = Pattern.compile("aa");
Matcher matcher = pattern.matcher(hello);
int count = 0;
int i = 0;
while (matcher.find(i)) {
count++;
i = matcher.start() + 1;
}
System.out.println(count); // prints 3
関連
-
Javaジェネリックを1つの記事で
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】指定した接尾辞で終わらない文字列に対する正規表現
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
Javaでよくある構文エラー
-
無効な文字定数
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
Java の double データ型における 0.0 と -0.0 の問題
-
Java基礎 - マッピングとQ/A