3

Java正規表現に関して何か誤解していますか? 以下は先行ゼロと一致すべきではありません:

public class Testit {
    public static void main(String[] args) {
        format("0115724848");
    }


    private static void format(String elementToFormat) {
        if (elementToFormat.matches("^0")) {
            System.out.println("leading zero:" + elementToFormat);
        } else {
            System.out.println("no leading zero:" + elementToFormat);
        }
    }
}
4

5 に答える 5

4

String.match全体に一致したいのですがString、正規表現は一致^0 しません

代わりに、次のような正規表現が必要です0.*。これは、「文字列は 0 で始まり、その後に 0 個以上の文字が続く」ことを意味します。または、必要に応じて、0\d*「文字列は 0 で始まり、その後にゼロ以上の数字が続く」ことを意味します。これは、入力例のようになります。

if ("0115724848".matches("0\\d*"))
    System.out.println("leading zero.");
于 2012-08-25T20:20:29.093 に答える
4

matches入力文字列全体に対してパターンを一致させようとします...そして、入力文字列は「文字列の先頭に0が続く」だけではありません。

が必要な場合"0.*"( は文字列全体に一致する^ため正確には不要です)、または を作成してから使用できます。matchesPattern

if (pattern.matcher(text).lookingAt())

もちろん、使用できるという点で、ここで正規表現を使用している理由は明確ではありません。

if (text.startsWith("0"))
于 2012-08-25T20:22:50.397 に答える
2

これは、使用する必要があるパターンです。

^0.*

また、startsWith("0")を使用しない理由- はるかに簡単

于 2012-08-25T20:20:10.227 に答える
0

この正規表現は、先頭に 0 がある数字に一致しますが、「0」には一致しません: /^0+[1-9]/

于 2017-08-22T17:16:26.750 に答える
0

このコードを確認してください..動作するはずです。

public class Testit {
    public static void main(String[] args) {
        format("0115724848");
    }


    private static void format(String elementToFormat) {
        if (elementToFormat.matches("^0.*")) {
            System.out.println("leading zero:" + elementToFormat);
        } else {
            System.out.println("no leading zero:" + elementToFormat);
        }
    }
}
于 2012-08-25T20:33:43.287 に答える