我有一个文本文件,每一行如下所示: (电影评论数据库)
product/productId: B00004CK40 review/userId: A39IIHQF18YGZA review/profileName: C. A. M. Salas review/helpfulness: 0/0 review/score: 4.0 review/time: 1175817600 review/summary: Reliable comedy review/text: Nice script, well acted comedy, and a young Nicolette Sheridan. Cusak is in top form.
我想解析此文件以检索:
- 产品/产品Id
- 评论/用户 ID
- 评论/个人资料名称
- 评论/帮助
- 评论/评分
- 评论/时间
- 回顾/总结
- 评论/文字
此信息稍后将使用 MovieReview
和 Movie
类进行封装。
public class MovieReview {
private Movie movie;
private String userId;
private String profileName;
private String helpfulness;
private Date timestamp;
private String summary;
private String review;
...
任何人都可以提供一种正确且有效的方法来解析此文件(大型数据集)吗?
谢谢。
最佳答案
如果它是一个大型数据集,您将希望避免一次将整个列表加载到内存中。我可能会用每行的处理程序来解决这个问题
public interface MovieReviewHandler {
void handle(MovieReview revies);
}
那么你可以如下解析:
public class MovieReviewParser {
public void parse(BufferedReader reader, MovieReviewHandler handler) {
Pattern regex = Pattern.compile("product/productId:(.*)review/userId:(.*)review/profileName:(.*)"); // add other fields
String line;
while ((line = reader.readLine()) != null) {
Matcher matcher = regex.matcher(line);
if (!matcher.matches()) throw new RuntimeException();
MovieReview review = new MovieReview();
review.productId = matcher.group(1);
review.userId = matcher.group(2);
review.profileName = matcher.group(3);
// etc
handler.handle(review);
}
}
}
关于java - 在java中解析文本文件(大数据集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35917384/