【问题标题】:Split a String at every 1000th comma in Java [duplicate]在Java中每隔1000个逗号拆分一个字符串[重复]
【发布时间】:2018-05-08 11:56:14
【问题描述】:

我无法使用正则表达式为字符串中的每 1000 个逗号分割字符串。我们可以分割字符串中的每 3 个逗号,但不能分割第 1000 个逗号。

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);
}

提前感谢您的建议。

【问题讨论】:

  • 为什么使用正则表达式?并问自己:“我了解问题中的正则表达式的作用吗?”
  • 尝试使用循环查找第 1000 个逗号的索引,然后执行子字符串。
  • 这个问题怎么是重复的!除非您当然认为 OP 应该在他/她的正则表达式字符串中放置 \\d+, 1000 次(我相信这也不起作用)。阅读问题。有没有人尝试使用副本中接受的答案来完成此任务?我认为 OP 最初在那里得到了代码。
  • @DevilsHnd 查看第二个、第三个等答案。数据也是骗子,只是结果不一样
  • 这是 OP 想要完成的最终结果...在每 1000 个分隔符处拆分。当然,其他一些答案可能会完成任务。

标签: java regex


【解决方案1】:

这可能是您正在寻找的正则表达式:

 (\w*,){3}\K\S+

  \w             Matches a word ([a-zA-Z0-9_])
  \w*            Matches 0 or infinite number of words...
  \w*,           ... Followed by a coma
 (\w*,){n}       Match this group, n times
          \K     Reset the starting point of the match after the n elements
            \S+  Matches any word after the (n-1)th coma

n 是元素的数量加 1。所以在您的情况下,它将是 1001

话虽如此,regex 可能不是解决此问题的正确工具 :)

【讨论】:

  • \K 不是 Java 中的有效令牌
  • 好点@ctwheels - 这是否已添加到 Java 正则表达式中?然而,它是 .NET、Perl 或 PCRE 的一项高级功能。
  • @DevilsHnd 不幸的是,它仍然不是 Java 的功能。
  • 我意识到了这一点,但是这篇文章的作者并没有而且仍然......它被某人投票赞成。 ;)
猜你喜欢
  • 2022-11-27
  • 2017-01-24
  • 2013-07-27
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多