• ベストアンサー

matchesを否定文として使う方法(Java)

Java実行時の引数として渡された値を元に、 「もし引数が0~9の値“ではない”場合は」というif文を作成したいのですが、 下記の記述だと、引数の最初の文字しか判定されていないようです。 if (args[0].matches("[^0-9]+") 引数の全ての文字が「0~9の値“ではない”」とするには、 どのように指定すれば宜しいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> 引数の全ての文字が「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]+") ^と$をくっつけるという手も。

hakase-chan
質問者

お礼

度々です。 実現したいのは、 if(0~9の値“ではない”) です。 0~9の値“ではない”時に、trueとなってくれるとうれしいです。

hakase-chan
質問者

補足

ありがとうございます。 すみません。 > ^と$をくっつけるという手も これが具体的にどういうものなのか分かりませんでした。

その他の回答 (4)

回答No.5

日本語難しいね(^^; 具体例書くといいですよ。 引数の全ての文字が「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)
回答No.4

String#matches()では文字列全体と一致させようとするから、[^0-9]+ で問題ないように思えます。 http://www.ideone.com/xlbgJ > 下記の記述だと、引数の最初の文字しか判定されていないようです。 なんかそんなこともなさそうな。自分が前提条件を間違えてるだけかもしれませんが。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

ありゃ、matches()の仕様を勘違いしてた。こんなかんじじゃなきゃだめみたい: http://www.ideone.com/U9aw3

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

! 使えばいいじゃん, と #1 は言っている. 完全に同意.

関連するQ&A