1

次のようなドメインを含むテキスト ファイルがあります。

ABC.COM
ABC.COM
DEF.COM
DEF.COM
XYZ.COM

テキスト ファイルからドメインを読み取り、ドメインのインスタンスがいくつあるかを確認したいと考えています。テキスト ファイルからの読み取りは簡単ですが、ドメインのインスタンス数を確認する方法がわかりません。助けてください。

4

4 に答える 4

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 を 1 行ずつ読み取り、区切り文字 (大文字と小文字のスペース) で分割することで、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)

参考:文字列の頻度を数える

于 2012-05-04T06:25:23.540 に答える
1

スペースで分割し (String インスタンスには method がありますsplit)、結果の配列を反復して使用しますMap<String(domainName), Integer(count)>- ドメインがマップにある場合は、マップのカウントを 1 増やします。そうでない場合は、ドメイン名をマップに入れ、値として 1 を設定します。

于 2012-05-04T06:22:53.327 に答える
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());
    }
于 2012-05-04T06:46:52.333 に答える
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 のロジックを変更する必要があります。

于 2012-05-04T08:06:55.927 に答える