0

テキストファイルから一意のIPアドレスのリストを見つけるためにJavaでプログラムを書く方法は?

私は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 アドレスを作成しただけであり、実際のデータ セットははるかに大きいことに注意してください。

一意のソース/宛先 IP アドレスのリストを見つけるために Java でプログラムを作成する方法を知りたいです。また、テキスト ファイル内の各 IP アドレスの出現回数を送信元/宛先アドレスとしてカウントするには?

4

2 に答える 2

4

これが Set コレクションの目的です。1 つの行のすべてのデータを保持するクラスを作成し、そのequalsandhashcodeメソッドを実装して、ソースと宛先のみを考慮するようにします。次に、すべてのクラスを Set に追加するだけで、最終的に一意の結果が得られます。

于 2013-05-16T00:41:15.117 に答える
0

多くの IP がある場合は、それらを long に変換することをお勧めします。

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; 
}

n次に、要素用のarrayListに一意のものを追加できます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.

次に、固有の IP を IP アドレス形式に変換します。

または、2 つの IP を比較する同等のインターフェイスを cou でオーバーライドし、それを使用してバイナリ検索を実行できます。したがって、変換を行う必要はなく、より高速になります。

于 2013-05-16T05:31:41.397 に答える