如何检查文本文件中域的实例数

时间:2012-05-04 06:20:06

标签: java

我有一个包含

等域名的文本文件
ABC.COM
ABC.COM
DEF.COM
DEF.COM
XYZ.COM

我想从文本文件中读取域并检查域中有多少个域。 从文本文件中读取很容易,但我对如何检查域的实例数量感到困惑。 请帮忙。

4 个答案:

答案 0 :(得分:1)

按空格分割(字符串实例有方法split),遍历结果数组并使用Map<String(domainName), Integer(count)> - 当域在地图中时,比将地图中的数量增加1,否则 - 放置域名在地图中并将1设置为值。

答案 1 :(得分:1)

更好的解决方案是使用地图以频率映射单词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();
    
  • 构建地图方法:您可以拆分file by reading them line by line中的网址并使用分隔符(在您的案例空间中)拆分。

    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)

参考:Counting frequency of a string

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果域名未知,您可以执行以下操作:

// 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的逻辑!