无法用Java编写方法从文本文件中查找唯一IP地址列表?

时间:2014-04-19 06:28:08

标签: java arrays sorting logfile

LogEntry [date=2010-03-24, time=07:24:28, siteName=ZZZZC941948879, computerName=RUFFLES, sIpAddress=GET, csMethod=222.222.222.222, csUriStem=/img/bg-top.jpg, csUriQuery=-, sPort=80, csUsername=-, csIpAddress=207.49.55.29, csVersion=HTTP/1.1, csUserAgent=Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+9.1;+Trident/4.0;+SLCC2;+.NET+CLR+2.0.50727;+.NET+CLR+3.5.30729;+.NET+CLR+3.0.30729;+Media+Center+PC+9.0;+MS-

这是我的代码:

public int countDistinctClientIPAddresses() {
    try {
        readLogFile();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    LogEntry[] temp = new LogEntry [1000];

    int counts = 0;
    for (int k = 0; k < count; k++) {
        if (!entryLog[0].getCsIpAddress().equals(
                entryLog[k].getCsIpAddress())) {
            entryLog[0] = temp[0];
            counts++;
        } else{
            for (int a = 0; a < count; a++){
                if (entryLog[0].getCsIpAddress().equals(
                        entryLog[k].getCsIpAddress())) {
                    entryLog[0] = temp[a];
                    counts--;

            }
            }

    }

    }
    return counts;
}
// basically I want to get a distinct ip addresses from a text logfile in which

有大量相同的IP地址。我收到一个错误空指针异常,我的  讲师让我制作一个新的阵列温度并将ip放入其中,这样我就不会放 进入它的下一个相同的地址,数组的数量将是我的答案,但我卡住了,我的输出  像688唯一的地址出错,但有很多相同的地址所以必须少 独特的地址帮助我。

2 个答案:

答案 0 :(得分:1)

据我了解 entryLog 值,您可以从 readLogFile()获得。因此,您可以使用 java.util.Set 来获取唯一IP地址列表:

public int countDistinctClientIPAddresses() {
    try {
        readLogFile();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Set<String> uniqueIPs = new HashSet<String>();
    for (int k = 0; k < count; k++) {
        uniqueIPs.add(entryLog[k].getCsIpAddress());
    }

    return uniqueIPs.size();
}

答案 1 :(得分:0)

如果您可以使用收藏品,可以试试这个

public int countDistinctClientIPAddresses() {
    try {
        readLogFile();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Set<String> entries = new HashSet<String>();
    for (LogEntry e : entryLog){
        entries.add(e.getCsIpAddress());
    }
    return entries.size();
}