2016-10-16 10 views
0

自分のバージョンのatoiを実装しようとしているので、文字列に数値以外の文字が含まれているかどうかをチェックしてエラーを処理したいのですが、+と - - 文字列の先頭は有効な記号のみです。私は現在word.matches("^[+=][a-zA-Z]+")を持っていますが、それに応じて私のニーズに合わせて変更する方法はわかりません。 例:20e48は、204から8が無効である、無効である2048は有効ですので、あなたが行くここ-2048regexのパターンマッチングから特定の文字を除外するにはどうすればよいですか?

+0

word.matches( "[ - +]?\\ d +") '? –

答えて

1

です:

public static void main(String[] args) { 
    String pattern = "^[+-]?[0-9]+$"; 
    System.out.println("20e48".matches(pattern)); 
    System.out.println("204-8".matches(pattern)); 
    System.out.println("+2048".matches(pattern)); 
    System.out.println("-2048".matches(pattern)); 
    System.out.println("2048".matches(pattern)); 
} 

それは出力します。

false 
false 
true 
true 
true 

説明:

^ => Starts 
[+-] => Either plus or minus sign 
? => Zero or one occurance 
[0-9] => Any number 
+ => One or more occurance 
$ => End 

このパターンと一致しない文字列があれば、それは有効な入力ではありません。

+0

恐ろしい!ありがとう!それを少し説明してもらえますか?申し訳ありませんが、私はまだ非常にこれに新しいとこの正規表現を理解したい! – Senginel

+0

'word.matches(" [ - +]?\\ d + ")'で十分です。 'matches()'の内部では、正規表現はデフォルトでアンカーされています。 –

0

^の後に、角カッコでマッチしたくない文字を試してください。例えば。 [^ k]は指定された文字列のk文字と一致しません。

0

この正規表現は、あなたのために働く可能性があります - 、1以上の数字以外の文字に続いて0以上の数字が続き、

^[+-]{0,1}[0-9]*[^0-9]+[0-9]*$ 

これは、(任意で)+または始まることを任意の文字列にマッチします0個以上の数字が続いています。

関連する問題