2

テキスト内から特定の数のチャンクをキャプチャしようとしています。テキストがKaneの高さが12345フィートであるとします。キャプチャしたい12345。私はこれを使おうとしています:

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 
String text = "Kane is 12345 feet high";
Pattern p = Pattern.compile("Kane is (\\d+) feet high");
Matcher m = p.matcher(text);
String s0 = m.group(0);

ただし、Match not foundエラーが発生します。私はここで何が間違っているのですか?つまり、Perlでは、これは完全に出力され12345ます:

$foo = "Kane is 12345 feet high";
$foo =~ /Kane is (\d+) feet high/;
print $1;
4

3 に答える 3

8

インスタンス化するだけMatcherでは不十分です。電話m.matches()をかける必要があります。標準的な方法は、次の場合にそれを配置することです。

if (m.matches()) s0 = m.group(1);
于 2013-01-09T10:26:59.797 に答える
6

Matcher.group()を呼び出す前に、Matcher.find()を呼び出す必要があります

String text = "Kane is 12345 feet high";
Pattern p = Pattern.compile("Kane is (\\d+) feet high");
Matcher m = p.matcher(text);
if(m.find()){
String s0 = m.group(0);

}

テキストがKaneの高さが12345フィートであるとします。12345をキャプチャしたい

テキスト内の数字をキャプチャするために、正規表現は次のようになっている必要があると思います。

    Pattern p = Pattern.compile("\\d+");
于 2013-01-09T10:26:32.637 に答える
1

これを試して:

public static String stripNonDigits(final String input){
  final StringBuilder sb = new StringBuilder();
  for(int i = 0; i < input.length(); i++){
    final char c = input.charAt(i);
    if(c > 47 && c < 58){
        sb.append(c);
    }
}
return sb.toString();

}テストコード:

public static void main(final String[] args){
final String input = "0-123-abc-456-xyz-789";
final String result = stripNonDigits(input);
System.out.println(result);
 }

出力:

0123456789

役立つかもしれません

于 2013-01-09T10:38:01.250 に答える