【发布时间】:2017-05-02 22:31:23
【问题描述】:
我必须从 CSV 文件中找出符合特定搜索条件的行。 CSV 文件中的数据如下所示:
Wilbur Smith,Elephant Song,McMillain,1992,1
Wilbur Smith,Birds of Prey,McMillain,1992,1
George Orwell,Animal Farm,Secker & Warburg,1945,1
George Orwell,1984,Secker & Warburg,1949,1
搜索条件是这样的:
Orwell,,,,
,Elephant,,,
第一行标识 2 行,第二行标识 1 行。我目前正在按如下方式读取文件,但未使用上述标准。
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
String[] dataItems = line.split(cvsSplitBy);
if (dataItems[0].contains(title) && dataItems[1].contains(author) && dataItems[2].contains(publisher)) {
bk[i++] = line;
if (bk.length > 4) {break;}
}
}
我正在添加一个固定大小的数组。如何使用条件作为正则表达式来识别行?
【问题讨论】:
-
您应该使用 CSV 解析器,以便它可以处理嵌入的逗号。然后你应该简单地使用
contains()来查看列值是否包含给定的文本,就像你现在正在做的那样。不需要正则表达式。 -
我不是 Java 专家。您会对仅使用正则表达式的答案感到满意吗?还是你也需要java代码来使用它?
-
你认为你为什么需要正则表达式?
-
大部分子字符串为空。因此,例如,如果发布者为空,则不应发生对发布者的搜索。我不是 Java 专家,但正则表达式不会比使用 contains 更好吗?包含 | ..等
-
您应该只将这些数据提取到类中,然后使用
.contains()或类似方法进行搜索,而不是尝试使用正则表达式。这个问题不适合使用正则表达式 IMO。