当前位置: 首页 > 面试题库 >

在Java中的每个第3个逗号处分割一个字符串

越霖
2023-03-14
问题内容

我有一个看起来像这样的字符串:

0,0,1,2,4,5,3,4,6

我要返回的是String[]在每个第三个逗号后被拆分的,因此结果如下所示:

[ "0,0,1", "2,4,5", "3,4,6" ]

我发现了类似的功能,但它们不会以逗号分隔n个。


问题答案:

您可以尝试将split方法与(?<=\\G\\d+,\\d+,\\d+),正则表达式一起使用

演示版

String data = "0,0,1,2,4,5,3,4,6";
String[] array = data.split("(?<=\\G\\d+,\\d+,\\d+),"); //Magic :) 
// to reveal magic see explanation below answer
for(String s : array){
    System.out.println(s);
}

输出:

0,0,1
2,4,5
3,4,6

说明

  • \\d表示一个数字,与[0-9]相同,例如03
  • \\d+表示一个或多个数字,例如123
  • \\d+,表示一个或多个后跟逗号的数字,例如1,234,
  • \\d+,\\d+,\\d+ 会接受三个数字,并且它们之间用逗号隔开 12,3,456
  • \\G 表示最后一个匹配项,或者如果没有(如果是第一次使用)字符串的开头
  • (?<=...),是正向后看,它将匹配逗号,,该逗号(?<=...)前面也有描述的字符串
  • (?<=\\G\\d+,\\d+,\\d+),因此将尝试查找在其前面有三个数字的逗号,并且这些数字在其前面以字符串开头(如^0,0,1您的示例)或之前匹配的逗号(例如2,4,5和)3,4,6

同样,如果您想使用其他字符,那么数字也可以使用其他字符集,例如

  • \\w 它将匹配字母字符,数字和 _
  • \\S 不是空格的一切
  • [^,] 一切不是逗号
  • … 等等。模式文档中的更多信息

顺便说一句,这种形式将在每3、5、7(以及其他奇数个)逗号上split("(?<=\\G\\w+,\\w+,\\w+,\\w+,\\w+),")分割,就像在每5个逗号上分割一样。

拆就每2,第4,第6,第8(和休息偶数)逗号,你将需要更换+{1,maxLengthOfNumber}split("(?<=\\G\\w{1,3},\\w{1,3},\\w{1,3},\\w{1,3}),")拆就每4个逗号的时候号码可以有最多3个数字(0,00,12,000,123,412,999)。

要分割每个第二个逗号,您还可以split("(?<!\\G\\d+),")根据我之前的回答使用此正则表达式



 类似资料:
  • 问题内容: 在JavaScript中,这是我们如何在每个第3个字符处分割字符串 我试图弄清楚如何用Java做到这一点。有指针吗? 问题答案: 你可以这样: 产生: 正则表达式匹配一个空字符串,该字符串的最后一个匹配项()后跟三个字符(),前者()

  • 问题内容: 是否可以每个字符分割一个字符串? 例如,假设我有一个包含以下内容的字符串: 我怎样才能使它看起来像这样: 问题答案: 192 为了完整起见,你可以使用正则表达式执行此操作: 对于字符的奇数,你可以执行以下操作: 你还可以执行以下操作,以简化较长块的正则表达式: re.finditer如果字符串很长,则可以使用它逐块生成。

  • 当我尝试用分隔符“|”拆分字符串时,它似乎拆分了每个字符。 这是我的线,导致了问题:

  • 产出是4。但显然我的期望是7。这是我的解决方案: 为什么会发生这种情况?任何人都可以给我一个更好的解决方案?

  • 问题内容: 我有一个模糊的字符串,像这样: 我想按逗号分割-但我需要忽略引号中的逗号。我怎样才能做到这一点?似乎正则表达式方法失败了;我想我可以在看到报价时手动扫描并进入其他模式,但是使用预先存在的库会很好。(编辑:我想我的意思是那些已经属于JDK或已经属于诸如Apache Commons之类的常用库的库。) 上面的字符串应分为: 注意:这不是CSV文件,它是文件中包含的单个字符串,具有较大的整体

  • 问题内容: 我有这样一个字符串: 我想按逗号分割-但我需要忽略引号中的逗号。我怎样才能做到这一点?似乎正则表达式方法失败了;我想我可以在看到报价时手动扫描并进入其他模式,但是使用预先存在的库会很好。 上面的字符串应分为: 问题答案: 可以使用正则表达式 输出: