我正在尝试解析一个非常结构化的大文件,只提取我想要处理的信息,如行开头的标记所示。我拉出的物品的大小不够大,似乎有些物品被跳过但我无法弄清楚原因。数据格式如下:
Id:1
ASIN:0827229534
标题:讲道模式:布道采样器
组:书籍
salesrank:396585
类似:5 0804215715 156101074X 0687023955 0687074231 082721619X
类别:2
|图书[283155] |科目[1000] |宗教与宗教灵性[22] |基督教[12290] |教士[12360] |传道[12368]
|图书[283155] |科目[1000] |宗教与宗教灵性[22] |基督教[12290] |教士[12360] |布道[12370]
评论:总数:2下载:2平均评级:5
2000-7-28 cutomer:A2JW67OY8U6HHK评分:5票:10有用:9
2003-12-14 cutomer:A2VE83MZF98ITY评分:5票:6有用:5
每个项目都列出了所有类别,即使该类别中没有项目(例如类似:0)有超过500,000个身份证号码,但是当我模式匹配时,查找ID仅报告约58,000个。我只是寻找带有“Id”的行并增加一个总和。以下是简单的代码。
import java.util.*;
import java.io.*;
import java.util.regex.*;
public class metaData4{
public static void main(String[] args) throws Exception{
File a = new File(args[0]);
Scanner doc = new Scanner(a);
String pattern = "Id.*";
int sum = 0;
while (doc.hasNextLine()){
String data = doc.nextLine();
if (data.matches(pattern) ){
sum++;
}
}
System.out.println(sum);
}
}
我正在使用的数据的链接(警告这是一个大文本文件!)http://snap.stanford.edu/data/bigdata/amazon/amazon-meta.txt.gz
编辑:为了使问题更清楚,我正在制作一个带有密钥作为ASIN的hasmap,并将值作为“类似”列表。 ASIN和Id显示相同的次数,并且我使用Id作为模式匹配的行,因为出现的次数由以下数字清楚地表示。运行上面的代码会在从上面的链接获取的较小文本文件中返回正确的Id出现次数,但在原始文件中不正确。
答案 0 :(得分:0)
这实际上不是模式匹配的问题。模式匹配按预期工作,但扫描仪存在缺陷。或至少写了文本文件,我发现有一个案例发生了同样的事情,可以在这里找到问题的答案:Java scanner not going through entire file