我已閱讀本網站,包括:link1和link2其中包括如何在Java中對IP地址(字符串表示形式)進行排序。但是我沒有得到正確的輸出。在Java中排序IP地址
我的數據(一個例子):
:: 2:3:4:5:6:7
:: 2:3:4:5:6:7:8
1 :: 8
1 :: 2:3
1 :: 2:3:4
1 :: 5:256.2.3.4
1 :: 3000.30.30.30
FE80 :: 217:f2ff:254.7.237.98,1:2:3:4 :: 5:1.2.3.4
2001:0000:1234:0000: 0000:C1C0:ABCD:0876
我加入這些IP地址(一些有效的一些無效)到一個ArrayList,然後將它傳遞給下面這樣:
ArrayList <String> list = new ArrayList<String>();
String [] tests = {"::2:3:4:5:6:7","2:3:4:5:6:7","::5:3:4:5:6:7:8","::5:3:4:5:6:7:8:9:0","1::8","1::2:3","1::2:3:4","1::5:256.2.3.4","1:1:3000.30.30.30","ae80::217:f2ff:254.7.237.98,1:2:3:4::5:1.2.3.4","2001:0000:1234:0000:0000:C1C0:ABCD:0876",
"12345::6:7:8","1::1.2.900.4","fe80::","::ffff:0:0"};
//添加到ArrayList的
for (String test1 : tests) {
list.add(test1);
}
//比較和排序
Collections.sort(list);
Collections.reverse(list);
//Collections.sort(ipList, new Comparator<String>() {
for(String ip: list){
System.out.println(ip);
}
但是我不能夠將數據正確地排序,並在降序排列得到排序不正確的結果。任何人都可以指導我更好的方式?提前致謝。請之間的IP地址記住 「::」 有一個零,因此這相當於0:0:0
結果我得到的是:
FE80 ::
ae80 :: 217: f2ff:254.7.237.98,1:2:3:4 :: 5:1.2.3.4
:: FFFF:0:0
:: 5:3:4:5:6:7:8 :9:0
:: 5:3:4:5:6:7:8
:: 2:3:4:5:6:7
2:3:4:5:6:7
2001:0000:1234:0000:0000:C1C0:ABCD:0876
1 :: 8
1 :: 5:256.2.3.4
1 :: 2:3:4
1 :: 2:3
1 :: 1.2.900。4
1:1:3000.30.30.30
12345 :: 6:7:8
你不排序「IP地址」。您正在對正好包含人類可讀版本IP的** STRINGS **進行排序。如果您想按照適當的數字順序對它們進行排序,則必須將PARSED變爲內部數字格式,然後對這些數字版本進行排序。 –
使用自定義比較器。 – StackFlowed
是的,我意識到這一點。但是,當你PARSE(我感到一些憤怒大聲笑)0:0:4大於1:1:0這不是我想要的。無論如何感謝指導。 –