質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1476閲覧

javaのgroupCountの答えが0になってしまう

renji

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/09/29 06:39

編集2018/09/29 06:49

JavaのgroupCount()について、質問します。

String S = "abcabdadefa"; String s1 = "a"; String s2 = "b"; Pattern pattern = Pattern.compile(s1); Pattern pattern2 = Pattern.compile(s2); Matcher matcher = pattern.matcher(S); Matcher matcher2 = pattern2.matcher(S); System.out.println(matcher.find()); System.out.println(matcher2.find()); System.out.println(matcher.groupCount()); System.out.println(matcher2.groupCount());

上のようなプログラムで

System.out.println(matcher.find()); System.out.println(matcher2.find());

Matcher.find()の命令は、trueが返ってくるのですが

System.out.println(matcher.groupCount()); System.out.println(matcher2.groupCount());

のMatcher.groupCount()の命令は0が返ってきます。

Matcher.find()の命令でtrueが返ってきているので、文字列Sの中の"a"や"b"のを拾ってくれていると思うのですが、
Matcher.groupCount()の答えが0になってしまう理由が分かりません。

よろしければ、教えて貰えないでしょうか?
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/29 06:46

>p.matcher(S) のpは、上で宣言してるpattern のことであっていますか?
renji

2018/09/29 06:49

はい。すみません。修正しました。
退会済みユーザー

退会済みユーザー

2018/09/29 07:00

renjiさんが、どうなるのが正解だと考えているのか知りたいです。(まとめて書かなくてすみません)
renji

2018/09/29 10:59

お返事遅れて、すみません。文字列内の該当したヒット数が出ると思っています。aだったら、4って出て欲しいです。
guest

回答2

0

Matcher#groupCountは、Matcherが使っている正規表現に存在する「グループ」を数えるもので、いくつマッチするかなどを数えるものではありません。
正規表現の「グループ」というのは、()で括られた部分のことを指します(例外あり)。
いまこの正規表現にグループとみなせる()が存在しないため、groupCount()の結果は0になります。

投稿2018/09/29 07:23

編集2018/09/29 08:01
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renji

2018/09/29 11:01

お返事いただき、ありがとうございます。 私のレベルだと理解が難しいのですが、正規表現の()の数を数える、ということだと認識しました。 ということは、groupCount()は、aだったら、4と答えてくれる、というような便利なものではないようですね。 勉強になりました。 ありがとうございました。
renji

2018/09/29 22:57

ありがとうございました! 貼っていただいたURL先を読ませてもらい、groupCount()の意味が理解できました。 この度はくわしく教えてくださって、ありがとうございました!
guest

0

ベストアンサー

個数を数える代替え案です。

java

1 public static void main(String[] args) { 2 String src = "abcabdadefa"; 3 String regex = "a"; 4 Pattern p = Pattern.compile(regex); 5 Matcher m = p.matcher(src); 6 int count = 0; 7 while (m.find()) { 8 count++; 9 } 10 System.out.println(count); 11 }

投稿2018/09/29 07:56

opyon

総合スコア1009

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renji

2018/09/29 11:04 編集

お返事いただき、ありがとうございます。 countという変数を使って、m.find()をwhileを使って、使用する方法、すごく分かりやすくて、勉強になりました! groupCount()は使えないようなので、今度からがこちらを使わせていただきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問