2017-04-06 12 views
1

正規表現と一致する0個以上の部分文字列を含む任意の文字列を与えると、一致した部分文字列に含まれる文字列の文字数を数えます正規表現?与えられた正規表現と一致する文字列内の文字を数える方法

例:

任意のメールアドレスと、「私は2つの電子メールアドレスを持っている:[email protected][email protected]」文字列にマッチする正規表現を考えると、これは32のint型の値を返します( 「[email protected]」に「[email protected]」を加えた文字数)。

私は十分にはっきりしていないようです。あなたがツイートの文字数に制限を設定したいと思うが、人々が自分の電子メールアドレスをツイートに含めることを許可し、ゼロ文字として数えさせたい。

ソリューションの可能性のあるメソッドシグネチャ:あなたの正規表現のマッチンググループを超える

public int lengthOfSubStringsMatchingRegex(String input, String regex) 
+0

私は任意のStringの長さを取得する方法を知っています。 –

+0

可能な複製http://stackoverflow.com/questions/2635082/java-counting-of-occurrences-of-a-word-in-a-string –

+0

重複していないので、私は数を求めていません文字列の出現、私は入力文字列内の正規表現と一致するすべての文字列の長さを探しています。しかし、その質問には、これに関連するいくつかの有益な情報があります。 –

答えて

3

だけループ、および文字数を抽出するためにlength()を使用しています。カウンターに追加してください。それだけです。代替案として

public int lengthOfSubStringsMatchingRegex(String input, String regex) 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(input); 

    int count = 0; 
    while (m.find()) 
     count += m.group().length(); 

    return count; 
} 

、やや読みにくく、あなたは直接オフセットを使用することができます。前回のマッチの開始インデックスを返します

count += m.end() - m.start(); 

スタートを()。
end()は、最後に一致した文字の後のオフセットを返します。

関連する問題