【发布时间】:2018-05-05 04:59:21
【问题描述】:
我在 CSV 文件中有这样的列表:
4231;"Swiss Federal Railways (SBB; CFF; FFS)"
67;"Hershey Co; The"
我的目标是清除这些字符串并只保留第一个分号:
4231; Swiss Federal Railways (SBB CFF FFS)
67; Hershey Co The
我尝试过这样做:
String[] companyDetails =
line.replaceAll("\"","").trim().split(";");
但这还不够。
编辑: 更清楚地说,这是我使用的代码:
br = new BufferedReader(new FileReader("/Users/blue/IdeaProjects/matching/src/main/resources/company_list.csv"));
// Creating a HashSet for holding Company object
HashSet<Company> companyHashSet = new HashSet<Company>();
String line;
// Read to skip the header
br.readLine();
// Reading from second line
while ((line = br.readLine()) != null) {
String[] companyDetails =
line.replaceAll("\"","").trim().split(";");
【问题讨论】:
-
我不知道这在 Java 中是否可行(仅使用正则表达式),因为它的正则表达式引擎不包含其他正则表达式引擎所做的某些标记。在其他正则表达式风格中,您可以使用
(?:^[^;\v]*;|\G(?!\A))[^;\v]*\K;。 -
您还没有替换其他分号。这与替换语音标记的协议完全相同,只是您使用正则表达式先在语音标记内部查找分号,然后将其删除
-
也许从第一个分号中获取一个子字符串,然后执行你的 replaceAll 方法。