gpt4 book ai didi

java - 如何清理字符串并仅保留第一个分号

转载 作者:行者123 更新时间:2023-12-01 17:53:32 26 4
gpt4 key购买 nike

我在 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

See regex in use here

((?:^[^;\v]*;|\G(?!\A))[^;\v]*);

更换

$1

其他语言(即 PCRE)

在其他正则表达式风格中,您可以使用以下正则表达式,但 Java 不支持标记 \K (重置报告匹配的起点 - 不再包含任何先前使用的字符在最后一场比赛中)。这将使用空字符串而不是捕获组的替换。

(?:^[^;\v]*;|\G(?!\A))[^;\v]*\K;
<小时/>

用法

See code in use here

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "((?:^[^;\\v]*;|\\G(?!\\A))[^;\\v]*);";
final String string = " 4231;\"Swiss Federal Railways (SBB; CFF; FFS)\"\n"
+ " 67;\"Hershey Co; The\"";
final String subst = "$1";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);
<小时/>

结果

输入

     4231;"Swiss Federal Railways (SBB; CFF; FFS)"
67;"Hershey Co; The"

输出

     4231;"Swiss Federal Railways (SBB CFF FFS)"
67;"Hershey Co The"
<小时/>

说明

  • ((?:^[^;\v]*;|\G(?!\A))[^;\v]*) 将以下内容捕获到捕获组 1 中
    • (?:^[^;\v]*;|\G(?!\A)) 匹配以下任意一项
      • ^[^;\v]*;
        • ^ 断言位置位于行首
        • [^;\v]* 匹配集合中不存在的任意数量的任何字符(除分号 ; 或垂直空格之外的任何字符)
        • ; 按字面意思匹配分号字符 ;
      • \G(?!\A) 断言上一场比赛结束时的位置
    • [^;\v]* 匹配集合中不存在的任意数量的任何字符(除分号 ; 或垂直空格之外的任何字符)
  • ; 按字面意思匹配分号字符 ;

关于java - 如何清理字符串并仅保留第一个分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com