2011-10-28 6 views
1

私はこれを理解することができないと愚かな気がしますが、本当に私を怒らせるようになっています。Java Regex quickie

文字列にstring.match(regex)を使用していることを確認するだけです。数値以外の文字が含まれている場合は、9999999にハードコードしてください。

ここに私のコードです。私は本質的に、ResultSet moduleResultsから取得した結果が数字以外の文字を含んでいないかどうかをチェックしてから、setEndPointIDを使用して、パラメータとしてlongを受け入れるかどうかを確認しています。 trim()はそこにあります。id_amr_moduleにスペースが入ることが多く、正規表現の試合を捨てないようにしたいからです。私も正規表現[0-9] *を試してみました。

String strEndPointID = moduleResults.getString("id_amr_module"); 
strEndPointID.trim(); 
if(strEndPointID.matches("\\d*")){ 
    msiRF.setEndpointID(moduleResults.getLong("id_amr_module")); 
} 
else{ 
    long lngEndPointID = 99999999; 
    msiRF.setEndpointID(lngEndPointID); 
} 

答えて

4

あなたは全体文字列が数値であることを確認するstart and end anchorsを必要としています。*の代わりに+を使用して、正規表現が少なくとも1桁に一致するようにする必要があります(^\\d*$は空の文字列と一致します)。完全リファクタリング:

long endPointID = 99999999; 
String strEndPointID = moduleResults.getString("id_amr_module").trim(); 
if(strEndPointID.matches("^\\d+$")){ 
    endPointID = Long.parseLong(strEndPointID); 
} 
msiRF.setEndpointID(endPointID); 
+1

String.matches()の最後に到達するまで、アンカーを必要としません。 –

+1

あなたは正しいです。 'String#matches()'をどのくらいの頻度で使用するかを示すために移動します。私はOPが欠けていた唯一のものは '*'の代わりに '+'だったと思います。 –

+2

+1もOPの 'trim()'の使用を修正するために+1します。 @TyC、あなたが 'trim()'の結果を変数に代入しなかったので、あなたが使った方法は効果がありませんでした: 'strEndPointID = strEndPointID.trim();' –

4

問題は、正規表現が任意の桁数を検索することです。あなたが探していることは、このようなものです:^\d+$

  • ^は、少なくとも一桁
  • $が文字列
+0

実際には...少なくとも、誰かが[regular-expressions.info](http://www.regular-expressions.info/java.html)に書かれていることを信じている場合、開始と終了のアンカーは必要ではありません。 – Roman

+0

ローマンは正しい - 私は確かにテストした。 –

+1

Mhm。私はそれに気付かなかった。それは間違いなく間違いです。まだ...それは本当に問題を解決していないと私は非常に似て答えを受けた著者はまだ。 ;) –

2

の終わりを意味

  • \d+を意味し、文字列の開始を意味し、あなたの正規表現は次のとおりです。

    "^\\d*$" 
    

    ^ - \\d*を始めてからスタート - あなたは $を見つけると同じ数の桁と一致 - 文字列

  • +1

    -1不正確 - String.matches()にアンカーは必要ありません。これは何らかの形で問題に対処しません。 –