- - PR -
boolean isIpAddress(String str) を実装するには?
投票結果総投票数:40 | |||
---|---|---|---|
1の方法 | 7票 | 17.50% | |
2の方法 | 4票 | 10.00% | |
3の方法 | 3票 | 7.50% | |
4の方法 | 4票 | 10.00% | |
5の方法 | 2票 | 5.00% | |
6の方法 | 0票 | 0.00% | |
7の方法 | 20票 | 50.00% | |
|
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-12-09 17:15
パッと思いつくのはどれでしょう?
お遊びにつき、あまり深く考えずにどうぞ。 1: 正規表現 java.lang.String#matches() 2: 正規表現 java.util.regex.Matcher & Pattern 3: 正規表現 Jakarta ORO 4: java.util.StringTokenizer で頑張る 5: java.lang.String#toCharArray() で更に頑張る 6: 実際に接続して繋がらなかったら false を返す 7: 後輩のデスクに「これ、作っといて」とメモを置く | ||||||||
|
投稿日時: 2003-12-09 18:18
try {
InetAddress.getByName(str); return true; } catch (Exception e){ return false; } って感じにしちゃうかな。 IPv6とか考えると、正規表現じゃ面倒。 IPv4だけでいいとしても、Inet4Addressのjavadocを見ると、
と4種類あるし、こんだけのバリデーションチェックは(バイト長までチェックするとしたら)面倒だし馬鹿馬鹿しい。 | ||||||||
|
投稿日時: 2003-12-09 19:07
こんにちは t-wata さん。
う、InetAddress.getByName() は接続不能な場合にも 例外を吐くと勘違いしてましたよ。 こりゃ選択肢に付け忘れたな。 即ち「8: @IT会議室でもっといい方法を教えてもらう」 | ||||||||
|
投稿日時: 2003-12-09 19:08
わたしもt-wataさんのやり方に1票です。
ただ,InetAddress.getByName()は,IPアドレスだけでなく ホスト名(hostsに書いてあったりDNSから引けるやつ)でも OKにしてくれちゃいますよね。 ホスト名はNGにしたいのだとすると・・・7かなぁ。 | ||||||||
|
投稿日時: 2003-12-09 19:14
おっと、ニアミスだ。
raccoon さん、こんにちは。
これは確かに。 実際は各選択肢のどれかと複合させる事になるでしょうね。
ううむ、現在までの結果を見ると、 後輩のデスクとメモはプログラマには必須のようです。 肝心の後輩が居なくならない事を祈ります。 | ||||||||
|
投稿日時: 2003-12-09 19:22
どうも、Wataです。
以前、同じ問題に直面しました。 関連スレッド→IPアドレスの文字列解析 残念ながら、7の方法が選択できなかったので(後輩がいない!)、 泣く泣く5で自作しました。 というか、Inet6AddressとInet4AddressのtextToNumericFormat(String src)を コピーしてリファクタリングって感じでした。 # 追加 今、もう一回やるなら、jakarta-OROで Perl5Util#split(list, "([:.])"); とInteger#parseInt()でやるかも [ メッセージ編集済み 編集者: Wata 編集日時 2003-12-09 19:42 ] | ||||||||
|
投稿日時: 2003-12-09 20:57
単に、^[0-9.]*$か^[:.0-9A-F]*$にマッチしなかったらホスト名と見なしてアウトにするだけでもいいような。 私なら、後輩にはもっと難しい事を頼みます [ メッセージ編集済み 編集者: t-wata 編集日時 2003-12-09 22:43 ] | ||||||||
|
投稿日時: 2003-12-09 23:07
> 単に、^[0-9.]*$か^[:.0-9A-F]*$にマッチしなかったらホスト名と見なしてアウトにするだけでもいいような。
なるほど。 でくのぼうさんも仰っているように,「複合」させればいいんですね。 InetAddress.getByName()を使った場合,DNSまで探しにいっちゃうと パフォーマンスがちょっと気になってたんですが,この方法で先に ホスト名をはじいておけば大丈夫そうですね。 数字とピリオドだけでもホスト名にできたような気もしますが (極端な話「.123.」とか),面倒な解析処理を作るのと, そんなホスト名が実在する可能性とのトレードオフを考えれば, 実用にはこれで十分という判断はアリでしょう。 > 私なら、後輩にはもっと難しい事を頼みます 最初は「後輩の力の差か?」と思いましたが,よくよく考えてみると そうやって難しいことやらせていかないと育たないですね。 # ってことは,教えてる先輩の力の差か・・・ |