- ベストアンサー
matchesを否定文として使う方法(Java)
Java実行時の引数として渡された値を元に、 「もし引数が0~9の値“ではない”場合は」というif文を作成したいのですが、 下記の記述だと、引数の最初の文字しか判定されていないようです。 if (args[0].matches("[^0-9]+") 引数の全ての文字が「0~9の値“ではない”」とするには、 どのように指定すれば宜しいでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 引数の全ての文字が「0~9の値“ではない”」 → ∀x{¬isdigit(x)}≡¬{∃x・isdigit(x)} ここでisdigit(x)は文字xが数字かどうかを表す述語。 ――ってことで、数字があるかをチェックすればよいのでは。 http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%BB%E3%83%A2%E3%83%AB%E3%82%AC%E3%83%B3%E3%81%AE%E6%B3%95%E5%89%87 > .matches("[^0-9]+") ^と$をくっつけるという手も。
その他の回答 (4)
- satomi3951
- ベストアンサー率71% (98/137)
日本語難しいね(^^; 具体例書くといいですよ。 引数の全ての文字が「0~9の値“ではない”」とは 0 12 0a a aaa どれが該当して、どれは該当しないの? とりあえず、いくつかパターン作ってみたので、お好みのを選んでください。 [^0-9]:0:false [^0-9]:12:false [^0-9]:0a:false [^0-9]:a:true [^0-9]:aaa:false [^0-9]+:0:false [^0-9]+:12:false [^0-9]+:0a:false [^0-9]+:a:true [^0-9]+:aaa:true .*[^0-9].*:0:false .*[^0-9].*:12:false .*[^0-9].*:0a:true .*[^0-9].*:a:true .*[^0-9].*:aaa:true あと、(引数の全て)の文字が「0~9の値“ではない”」場合はループしないと無理です。
- osamuy
- ベストアンサー率42% (1231/2878)
String#matches()では文字列全体と一致させようとするから、[^0-9]+ で問題ないように思えます。 http://www.ideone.com/xlbgJ > 下記の記述だと、引数の最初の文字しか判定されていないようです。 なんかそんなこともなさそうな。自分が前提条件を間違えてるだけかもしれませんが。
- osamuy
- ベストアンサー率42% (1231/2878)
ありゃ、matches()の仕様を勘違いしてた。こんなかんじじゃなきゃだめみたい: http://www.ideone.com/U9aw3
- Tacosan
- ベストアンサー率23% (3656/15482)
! 使えばいいじゃん, と #1 は言っている. 完全に同意.
お礼
度々です。 実現したいのは、 if(0~9の値“ではない”) です。 0~9の値“ではない”時に、trueとなってくれるとうれしいです。
補足
ありがとうございます。 すみません。 > ^と$をくっつけるという手も これが具体的にどういうものなのか分かりませんでした。