【问题标题】:Split String based on specific character sequence根据特定字符序列拆分字符串
【发布时间】:2021-04-20 16:08:50
【问题描述】:

所以我的输入字符串如下所示:

“O2TV,SportTV”,Netflix /603605506,2016-01-02 15:15:01

年度订阅,Netflix /602602602,2016-01-02 10:55:32

权力的游戏,Netflix /602602602,2016-01-02 09:49:09

我正在反转它们并尝试拆分

line = StringService.reverseIt(line);//reversing line so we can split it from end
String[] splitString = line.split("([ ./])", 5);

但是因为我的正则表达式不正确,所以我的拆分不正确,它看起来像这样:

时间 = 22:13:11

数据为 = 2016-02-29

电话是 = 604606321,

提供者是 =

注意 = 987654321、Netflix 的充电

如果我在正则表达式中只留下空格,它会正确拆分,但我的字符串两侧有不需要的字符。所有输入数据从后向都有相同的模式,它是:空格()然后逗号(,)然后斜杠(/)然后逗号(,)。我需要使用的正确正则表达式是什么?提前谢谢大家!

【问题讨论】:

  • 解析逗号分隔的文本行,带引号的值:使用 CSV 库, 不要为此使用正则表达式。
  • @Andreas 感谢您的回答,但它们不仅是逗号分隔的。每行又是空格、逗号、反斜杠和逗号
  • @Bonuseto 我猜你误解了这个概念。您提供的字符串是 CSV。仅仅因为您以不同的方式解析内容并不会使其无效 CSV。您只需对提取的 CSV 值应用拆分逻辑(从时间开始的日期)。
  • @Andreas 但我不是从时间中拆分唯一的日期,而是拆分所有五个部分:时间、数据、电话、提供和注释,我需要根据空格拆分它们,逗号和反斜杠
  • 使用 CSV 解析器以逗号分隔(这将处理逗号在引号内的情况)。然后,您可以根据需要使用 String#split 拆分其他部分。

标签: java regex string split


【解决方案1】:

因为这对评论来说太长了......

当使用您选择的任何库或自定义解决方案将这些行视为 CSV 时,您将以一种或另一种形式获得以下内容(在这些示例中,line[] 只是一个简单的String[]):

示例 1:

"O2TV, SportTV", Netflix /603605506, 2016-01-02 15:15:01

line[0] = "O2TV, SportTV"
line[1] = Netflix /603605506
line[2] = 2016-01-02 15:15:01

示例 2:

yearly subscription, Netflix /602602602, 2016-01-02 10:55:32

line[0] = yearly subscription
line[1] = Netflix /602602602
line[2] = 2016-01-02 10:55:32

示例 3:

game Of thrones, Netflix /602602602, 2016-01-02 09:49:09

line[0] = game Of thrones
line[1] = Netflix /6026026022
line[2] = 2016-01-02 09:49:09

根据您想要的输出,我猜line[0] 始终是provider

电话号码始终为line[1].substring(line[1].indexOf('/')) Netflix可以通过line[1].substring(0,line[1].indexOf('/'))提取

字符串recharging of 987654321 不包含在任何示例中。

对于时间和日期部分,您要么从 line[2] 创建一个 LocalDateTime 对象,然后使用 DateTimeFormatter 将日期和时间从中提取到一个单独的 String 中,要么您也使用substring

String date = line[2].substring(0,line[2].indexOf(' '));
String time = line[2].substring(line[2].indexOf(' '));

问题:已解决。

根本不需要反转字符串。解析这些解析值所需的所有逻辑都是通过使用 String 类的 substringindexOf 方法完成的。不需要正则表达式。

【讨论】:

  • “所有需要的逻辑......” 将包括 CSV 库。 --- 我的猜测是provider = "Netflix"note = "recharging of 987654321"note = "game Of thrones" 等。
  • 我猜你猜得比我猜的好;)
最近更新 更多