RNAME。
例えば、「111」、「2」、「33」、trueを返す必要があります - 指定した文字列のみだけで、特定の数字が含まれているかどうかを確認する必要があります。
"12" falseを返す必要があります。
空の文字列(「」)もtrueを返す必要があります。
文字列が数字のみとなし、他の文字が含まれています。
仕事に思える醜いのJava正規表現を書いたが、助けることはできませんが、それははるかに短い形で書かれるべきだと思います。
str.matches("1*|2*|3*|4*|5*|6*|7*|8*|9*|0*")
すべての数字一つ一つのリストを避け、上記行うには、より簡単でエレガントな方法はありますか?
PushpeshクマールRajwanshi:
あなたは、最初の桁をキャプチャするためにグループを使用して、次の桁がすべて同じであることを保証するために、後方参照を使用してこの正規表現を使用することができます
^(\d)?\1*$
説明:
^
- 文字列のスタート(\d)?
-グループ1の1桁とキャプチャにマッチし、?
それが空の文字列にマッチできるようにするには、オプションになります。\1*
- 同じ数字の0回以上にマッチ$
- 文字列の終わり
Javaコード、
List<String> list = Arrays.asList("5","5555","11111","22222","1234", "");
list.forEach(x -> {
System.out.println(x + " --> " + x.matches("(\\d)?\\1*"));
});
プリント、
5 --> true
5555 --> true
11111 --> true
22222 --> true
1234 --> false
--> true