Java读取文件时如何使用哈希集添加带句点的字符串
Java How to Use Hashset Add String with Period when Reading from File
我正在使用带有 Buffer
的基本 FileReader
读取一个文件,并根据其中有一个句点将结果分类为不同的 HashSet
或没有。
稍后在我的程序中,我使用 contains()
方法将字符串与 HashSet
进行比较。
非句点集工作正常,但其中有句点的集搞砸了。我相信我已经将它缩小到 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
时,这些值与我认为放入其中的值不同:
在添加到 Double
HashSet
之前来自 println 的结果示例:
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 在句点之前被截断了,有些根本就没有出现在哈希集中。
有人知道我在这里做错了什么吗?关于带字符串的哈希集或从文件中读取是否有一些特殊规则或边缘情况?我只是一个有基本错字的菜鸟吗?
要么有第三个 Set<String>
通过 getDoubleTLD-S-Set 返回,要么 getter
Set<String> getDoubleTLDSet(){ //getDoubleTLD-S-Set ??
return singleTLDSet;
}
returns 单一顶级域名集。
否则代码没问题。
(调用 StringEscapeUtils.escapeJava 有什么意义?我不会仅仅为了存储字符串而这样做。)
我正在使用带有 Buffer
的基本 FileReader
读取一个文件,并根据其中有一个句点将结果分类为不同的 HashSet
或没有。
稍后在我的程序中,我使用 contains()
方法将字符串与 HashSet
进行比较。
非句点集工作正常,但其中有句点的集搞砸了。我相信我已经将它缩小到 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
时,这些值与我认为放入其中的值不同:
在添加到 Double
HashSet
之前来自 println 的结果示例:
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 在句点之前被截断了,有些根本就没有出现在哈希集中。
有人知道我在这里做错了什么吗?关于带字符串的哈希集或从文件中读取是否有一些特殊规则或边缘情况?我只是一个有基本错字的菜鸟吗?
要么有第三个 Set<String>
通过 getDoubleTLD-S-Set 返回,要么 getter
Set<String> getDoubleTLDSet(){ //getDoubleTLD-S-Set ??
return singleTLDSet;
}
returns 单一顶级域名集。
否则代码没问题。
(调用 StringEscapeUtils.escapeJava 有什么意义?我不会仅仅为了存储字符串而这样做。)