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唯一的地址出错,但有很多相同的地址所以必须少 独特的地址帮助我。
答案 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();
}