我有一个包含域的文本文件
ABC.COM
ABC.COM
DEF.COM
DEF.COM
XYZ.COM
我想从文本文件中读取域并检查有多少域实例。从文本文件中读取很容易,但我对如何检查域实例的数量感到困惑。请帮忙。
我有一个包含域的文本文件
ABC.COM
ABC.COM
DEF.COM
DEF.COM
XYZ.COM
我想从文本文件中读取域并检查有多少域实例。从文本文件中读取很容易,但我对如何检查域实例的数量感到困惑。请帮忙。
按空格分割(字符串实例有方法split
),遍历结果数组并使用Map<String(domainName), Integer(count)>
- 当域在地图中时,比在地图中的计数增加 1,而不是 - 将域名放在地图中并将 1 设置为值。
更好的解决方案是使用 Map 将单词 Map 与频率进行映射。
Map<String,Integer> frequency = new LinkedHashMap<String,Integer>();
读取文件
BufferedReader in = new BufferedReader(new FileReader("infilename"));
String str;
while ((str = in.readLine()) != null) {
buildMap(str);
}
in.close();
构建地图方法:您可以通过逐行读取它们并用分隔符拆分(在您的案例空间中)来拆分文件中的 url。
String [] words = line.split(" ");
for (String word:words){
Integer f = frequency.get(word);
if(f==null) f=0;
frequency.put(word,f+1);
}
通过以下方式查找特定域:
frequency.get(domainName)
参考:字符串的计数频率
List<String> domains=new ArrayList<String>(); // values from your file
domains.add("abc.com");
domains.add("abc.com");
domains.add("xyz.com");
//added for example
Map<String,Integer> domainCount=new HashMap<String, Integer>();
for(String domain:domains){
if(domainCount.containsKey(domain)){
domainCount.put(domain, domainCount.get(domain)+1);
}else
domainCount.put(domain, new Integer(1));
}
Set<Entry<String, Integer>> entrySet = domainCount.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println(entry.getKey()+" : "+entry.getValue());
}
如果域未知,您可以执行以下操作:
// Field Declaration
private Map<String, Integer> mappedDomain = new LinkedHashMap<String, Integer>();
private static final List<String> domainList = new ArrayList<String>();
// Add all that you want to track
domainList.add("com");
domainList.add("net");
domainList.add("org");
...
// Inside the loop where you do a readLine
String[] words = line.split(" ");
for (String word : words) {
String[] wordSplit = word.split(".");
if (wordSplit.length == 2) {
for (String domainCheck : domainList) {
if (domainCheck.equals(wordSplit[1])) {
if (mappedDomain.containsKey(word)) {
mappedDomain.put(word, mappedDomain.get(word)+1);
} else {
mappedDomain.put(word, 1);
}
}
}
}
}
注意:这适用于 xxx.xxx 之类的东西;如果您需要处理复杂的格式,则需要从 wordSplit 修改逻辑!