2013-05-16 31 views
0

如何使用Java編寫程序以從文本文件中查找唯一IP地址列表?從文本文件中查找唯一IP地址列表

我只是在Java的新手。我有以下txt格式的數據:

Date first seen   Duration Proto  Source IP Addr:Port  Destination IP Addr:Port Packets Bytes Flows 
2013-03-03 23:54:46.574  8.000 UDP  108.169.77.76:12345 -> 108.169.0.112:53   5  325  1 
2013-03-03 23:59:51.984  0.000 UDP  100.253.69.196:62458 -> 100.256.234.129:1947   1  68  1 
2013-03-03 23:59:52.048  0.000 UDP  108.450.45.35:123124 -> 108.123.0.987:9101  2  1686  1 

請注意,我剛剛編制了這些IP地址,實際數據集要大得多。

我想知道如何在java中編寫程序來查找唯一的源/目標IP地址列表?還要計算文本文件中每個IP地址的出現次數作爲源/目標地址?

回答

4

這是Set集合的用途。創建一個包含一行所有數據的類,實現它的equalshashcode方法,以便它只關心源和目標,然後簡單地將所有類添加到Set中,最後會得到唯一的結果。

+3

這就是'awk'的用途。 – Kaz

+1

@Kaz「我想知道如何在** java **中編寫程序」 –

+0

我想問一下如何拆分這些列,以便獲得源IP地址列表和目標地址列表? – user1769197

0

如果你有很多IP的,我建議你把它們轉換爲長:

public long ipConversion(String addr){ 
    String[] addrArray = addr.split("\\."); 

    long num = 0; 
    for (int i = 0; i < addrArray.length; i++) { 
     int power = 3 - i; 

     num += ((Integer.parseInt(addrArray[i]) % 256 * Math.pow(256, power))); 
    } 
    return num; 
} 

然後,您可以添加獨特的人到一個ArrayList中,這是n元素O(n*log_n)

ArrayList<Long> arr = new ArrayList<>(); 
int x = Collections.binarySearch(arr, IPaddress); 
if(x < 0)//this mean IPaddress doesnt exist in your list 
    arr.add(-x-1, IPaddress) 
//binary search return -insertionpoint if the element was in the arraylist 
//so you should insert it to -insertionpoint-1. 

然後將唯一的ips轉換爲IP地址格式。

或者,cou可以覆蓋比較兩個IP的可比較接口,並且可以使用它進行二進制搜索。所以你不必做轉換,這會更快。