2017-04-05 8 views
-1

CodeFightの問題では、文字列の最初の桁を抽出して文字列として返すよう求められます。数字で始まらない場合はnullを返します。

私は、何の問題を正規表現を使用していない、まだ私は非常によく、トップの答えを理解していません。誰かがそれは素晴らしいことだ説明できる場合

String longestDigitsPrefix(String inputString) { 
    return inputString.replaceAll("^(\\d*).*","$1"); 
} 

を:)

+1

数字で始まらない場合は 'null'を返すはずですか?投稿したメソッドがその場合は空の文字列 '' "を返します。 – ruakh

+0

[参考 - この正規表現はどういう意味ですか?](http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean) – Tom

答えて

2

正規表現^(\\d*).*が常に一致します

から 全体入力は、(ブラケットを介して)捕捉リーディングは、数字( *が0以上 \d手段「デジット」を意味する場合)( ^「が入力開始」を意味します)

置換文字列$1は、 "グループ1"(最初のグループは括弧で囲まれたグループ)を意味します。


実際には、解決策は最もエレガントではありません。

String longestDigitsPrefix(String inputString) { 
    return inputString.replaceAll("\\D.*", ""); 
} 

この正規表現は、最後に遭遇した最初の非桁から一致し、それを削除します(何も置き換え):これは、より読みやすい/高速化/ /より良い簡単です。

-1

はいこの関数はnullを返すと想定されています。 ありがとうボヘミアン、実際に私を混乱させるのは、私は^(\ d *)が\ D *と同じだと思ったことです! あなたのソリューションはさらに優れています!私は一般的な正規表現とそれがいかに効率的であるかに驚かされますが、マスターするのは簡単ではありません。