1

文字列をパラメーターとして取り、パターンに一致する場合は別の文字列を返し、それ以外の場合は別の文字列を返す Java メソッドを作成しようとしていますnull。パターン:

  • 数字 (1 桁以上) で始まります。続いて
  • コロン (" :"); 続いて
  • 1 つの空白 (" ")。続いて
  • 1 文字以上の任意の Java 文字列

したがって、このパターンに一致するいくつかの有効な文字列:

50: hello
1: d
10938484: 394958558

そして、このパターンに一致しないいくつかの文字列:

korfed49
: e4949
6
6:
6:sdjjd4

メソッドの一般的なスケルトンは次のとおりです。

public String extractNumber(String toMatch) {
    // If toMatch matches the pattern, extract the first number
    // (everything prior to the colon).

    // Else, return null.
}

これまでのところ私の最善の試みですが、間違っていることはわかっています。

public String extractNumber(String toMatch) {
    // If toMatch matches the pattern, extract the first number
    // (everything prior to the colon).
    String regex = "???";
    if(toMatch.matches(regex))
        return toMatch.substring(0, toMatch.indexOf(":"));

    // Else, return null.
    return null;
}

前もって感謝します。

4

2 に答える 2

4

あなたの説明は的確です。今では正規表現に翻訳する必要があります。

^      # Starts
\d+    # with a number (1+ digits); then followed by
:      # A colon (":"); then followed by
       # A single whitespace (" "); then followed by
\w+    # Any word character, one one more times
$      # (followed by the end of input)

Java文字列で与える:

"^\\d+: \\w+$"

また、数字をキャプチャする必要があります。括弧を囲み\d+、を使用しMatcher、一致する場合はグループ1をキャプチャします。

private static final Pattern PATTERN = Pattern.compile("^(\\d+): \\w+$");

// ...

public String extractNumber(String toMatch) {
    Matcher m = PATTERN.matcher(toMatch);
    return m.find() ? m.group(1) : null;
}

注:Javaでは、\wASCII文字と数字のみに一致し(たとえば、.NET言語には当てはまりません)、アンダースコアにも一致します。アンダースコアが必要ない場合は、(Java固有の構文)を使用できます。

[\w&&[^_]]

\w正規表現の最後の部分の代わりに、次のように指定します。

"^(\\d+): [\\w&&[^_]]+$"
于 2013-01-10T00:17:38.483 に答える
2

次を使用してみてください:\ d +:\ w +

于 2013-01-10T00:17:31.667 に答える