特定のアドレスが有効なネットマスクであるかどうかを判断するためのJava6での最も簡単な方法は何ですか?基本的に、比較に使用する有効なIPの配列を作成する1つのソリューションを見つけました(つまり、「255.255.255.255」、「255.255.255.254」、「255.255.255.252」など)。より簡単な方法はありますか、それともこれが最善の方法ですか?
質問する
8037 次
4 に答える
4
この擬似コードはどうですか?
function IS_VALID(MASK)
boolean zeroStart = false
for each byte in MASK
for each bit
if bit = 1 and zeroStart = false
continue
if bit = 1 and zeroStart = true
return INVALID_MASK
if bit = 0 and zeroStart = false
zeroStart = true
if bit = 0 and zeroStart = true
continue
return VALID_MASK
于 2012-04-10T14:47:07.453 に答える
4
外部の依存関係を含めてもかまわない場合は、Apacheのcommons.netに探しているものが含まれている可能性があります。
SubnetUtilsとそのSubnetInfoネストされたクラスを見てください。SubnetUtils
IPアドレスとマスクを使用してを作成できます。マスクが無効な場合、コンストラクターは例外をスローし、SubnetInfo.html #isInRangeはIPがマスクの範囲内にあるかどうかを通知します。
于 2012-04-10T14:50:33.527 に答える
1
Serg10の答えは最も簡単だと思います。
外部の依存関係を回避する必要がある場合は、Inet4Addressを使用してIPアドレス文字列をバイトの配列に変換してから、バイトを分析する必要があります。正規表現を使用して、または文字列の固定セットと比較して文字列を分析しようとすると、間違った答えが返される可能性があります。
- IPアドレスのコンポーネントには、先行ゼロを含めることができます。
- IPアドレスは、3つ、2つ、または1つのコンポーネントで書き込むこともできます。
IPアドレス文字列がどのように見えるかの説明については、 Inet4Addressjavadocを参照してください。
于 2012-04-10T15:27:12.580 に答える
0
正規表現を使ってみることができます
Pattern p = Pattern.compile("^((2[0-5][0-5]|1[\\d][\\d]|[\\d][\\d]|[\\d])\\.){3}(2[0-5][0-5]|1[\\d][\\d]|[\\d][\\d]|[\\d])$");
String ip = "255.255.255.0.2";
Matcher m = p.matcher(ip);
if(m.matches()) {
//valid
}
于 2012-04-10T14:57:08.497 に答える