我的“缓存”列表出了点问题:
private static List<String> urlsCacheList = new ArrayList<String>();
...
private static void parseUrlsToQueue(Content content){
String str = content.toString();
Pattern p = Pattern.compile(CSS_JS_PATTERN);
Matcher m = p.matcher(str);
while (m.find()) {
String link = m.group();
if(link.equals("http://static.gazeta.ru/nm2012/css/new_common_css_pda54.css")){
LOG.warn("******************cache CONTAINS STRING http://static.gazeta.ru/nm2012/css/new_common_css_pda54.css " + urlsCacheList.contains(link) + " ;" + link +";" );
}
if(!urlsCacheList.contains(link)){
urlsCacheList.add(link);
queue.add(link);
}
}
}
因此,经过一些迭代urlsCacheList.contains(link)
在等于链接上返回false,并且
LOG.warn("******************cache CONTAINS STRING http://static.gazeta.ru/nm2012/css/new_common_css_pda54.css " + urlsCacheList.contains(link) + " ;" + link +";" );
打印:
cache CONTAINS STRING http://static.gazeta.ru/nm2012/css/new_common_css_pda54.css false ;http://static.gazeta.ru/nm2012/css/new_common_css_pda54.css;
但它主要在相同的字符串上返回true,每次30或40次迭代返回false;
UPDATE1: 对不起伙计在我看来这个问题在另一个地方,我从Fetcher.class中调用parseUrls()方法:
..
ContentParser.parseUrlsToQueue(content);
..
所以经过一些迭代之后,我的urlsCacheList只是重新初始化为null,因为自己的类重新创建;
答案 0 :(得分:0)
是否可以打印未通过包含检查的字符串的字符串对象哈希id。我想这可能是因为为少数字符串创建了一个新的String对象,因此它的行为就像这样。
一种解决方案是调用String.intern()方法来解决这个问题。