0

我正在尝试解析一个非常结构化的大文件,并仅提取我想要使用的信息,如行首的标签所示。我拉出的物品的尺寸不够大,似乎有些物品被跳过了,但我不知道为什么。数据格式如下:

ID:1
ASIN:0827229534
标题:讲道模式:布道采样器
组:图书
销售排名:396585
类似:5 0804215715 156101074X 0687023955 0687074231 082721619X
类别:2
|书籍[28315]|宗教[283155]|与精神[20]|宗教[10]基督教[12290]|神职人员[12360]|讲道[12368] |书籍[283155]|主题[1000]|宗教与灵性[22]|基督教[12290]|神职人员[12360]|布道[12370] 评论:总计: 2 次下载:2 平均评级:5 2000-7-28 客户:A2JW67OY8U6HHK 评级:5 票:10 有帮助:9 2003-12-14 客户:A2VE83MZF98ITY 评级:5 票:6 有帮助:5

每个项目都列出了每个类别,即使该类别中没有项目(例如相似:0)有超过 500,000 个 Id 编号但是当我模式匹配以查找 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

编辑:为了使问题更清楚,我正在制作一个 hasmap,其中键作为 ASIN,值作为“相似”列表。ASIN 和 Id 出现的次数相同,我使用 Id 作为模式匹配的行,因为出现的次数由以下数字清楚地指示。运行前面的代码会在从上面的链接获取的较小文本文件中返回正确的 Id 出现次数,但在原始文件上不正确。

4

1 回答 1

0

这实际上根本不是模式匹配的问题。模式匹配按预期工作,但是扫描仪存在缺陷。或者至少是文本文件的编写,我发现了一个发生同样事情的案例,问题的答案可以在这里找到:Java 扫描仪没有遍历整个文件

于 2014-04-28T03:46:03.487 回答