0

我正在使用FileReader带有a 的 basic 读取文件,并根据它们是否有句Buffer点将结果分类到不同的 s 中。HashSet

稍后在我的程序中,我将字符串与HashSetusingcontains()方法进行比较。

Non-period set 工作正常,但是其中有句号的 set 被搞砸了。我相信我已经将其范围缩小到 add 方法,尽管它也很可能与读取文件的方式有关。

{
    FileReader file;
    BufferedReader br;
    try {
        file = new FileReader(new File("./support/effective_tld_names.txt"));
        br = new BufferedReader(file);
        String temp;
        while ((temp = br.readLine()) != null) {
           if(!(temp.startsWith("//") || temp.isEmpty())){
               int dotCount = temp.length() - temp.replace(".", "").length();
               if(dotCount == 0){
                   singleTLDSet.add(temp);
               } else if(dotCount == 1) {
                   System.out.println(StringEscapeUtils.escapeJava(temp));
                   doubleTLDSet.add(StringEscapeUtils.escapeJava(temp));
               } else {
               }
           }
        }
        file.close();
        br.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

稍后在我的程序中:

Iterator i = ValidTLDS.getDoubleTLDSSet().iterator();
while(i.hasNext()) {
    String next = (String) i.next();
    System.out.println(next);
}

奇怪的是,当我遍历 时HashSet,这些值与我认为的不同:

在将它们添加到之前的 println 结果示例Double HashSet

codespot.com
googleapis.com
googlecode.com
pagespeedmobilizer.com
withgoogle.com
herokuapp.com
herokussl.com
iki.fi
biz.at
info.at
co.pl
azurewebsites.net

结果形式的样本迭代:

eurovision
ventures
ads
ninja
claims
pharmacy
exchange
trust
بھارت
epson

看起来有些 TLD 在此期间之前被截断,有些根本没有出现在哈希集中。

有人知道我在这里做错了什么吗?关于带字符串的哈希集或从文件中读取是否有一些特殊规则或边缘情况?我只是一个有基本错字或什么的菜鸟吗?

4

1 回答 1

1

Set<String>通过 getDoubleTLD-S-Set 或 getter 返回的第三个

Set<String> getDoubleTLDSet(){ //getDoubleTLD-S-Set ??
    return singleTLDSet;
}

返回单个TLDSet。

否则代码很好。

(调用 StringEscapeUtils.escapeJava 有什么意义?我不会仅仅为了存储字符串而这样做。)

于 2015-01-17T11:20:36.650 回答