【问题标题】:Splitting string between found patterns [duplicate]在找到的模式之间拆分字符串[重复]
【发布时间】:2015-12-01 04:43:54
【问题描述】:

分割字符串的标准方法

String [] arr = s.split (regex);

切出碎片并删除找到的正则表达式。是一种相反的方法吗?

注意:在我的情况下,正则表达式之间没有任何内容

例子:

输入

s = "320,192,6057,1,0,0:0:0:0:64,192,6327,128,0,7408:0:0:0:0:";

输出

arr[0] = "320,192,6057,1,0,0:0:0:0:";
arr[1] = "64,192,6327,128,0,7408:0:0:0:0:";

【问题讨论】:

  • 你怎么称呼相反的?严格来说,相反的是删除所有与正则表达式不匹配的“片段”,这是你想要的吗?
  • 问题不清楚,你应该添加一个输入/输出示例
  • @Dici 是的,但现在它是否会被删除并不重要。更新了这个重要细节的问题
  • 有什么意义?只需在输出每个拆分时添加分隔符即可。如果不添加到最终元素很重要,请检查索引不是(length() - 1)
  • @aliteralmind 也许是 wtong 发布了一个非常简单的例子。我会编辑那个

标签: java string split


【解决方案1】:

您可以使用积极的后向正则表达式来拆分您的字符串,如下所示:

(?<=;)

Working demo

IdeOne code

String[] arr = "1234:5678;8765,4321;".split("(?<=;)");
System.out.println(Arrays.asList(arr));
// arr[0] => 1234:5678;
// arr[1] => 8765,4321;

使用正则表达式环视的技巧(此答案中的正面环视)是环视不消耗字符,因此您不会丢失所需的 ;

【讨论】:

  • 听起来可以。你测试过吗(使用拆分)?
  • @Dici 是的,更新了 IdeOne 在线演示
  • 问题中的示例很简单。 regex101.com/r/pT1lA4/2 在这个测试中,我使用了我将在我的程序中使用的字符串。它适用于这样的正则表达式吗?
  • @risingprogrammer 您不应该更改具有完全不同含义的问题,因为答案已经过时了。恕我直言,您应该将您的问题编辑回我回答的原始问题,将其标记为已解决并创建另一个问题以防您有更多疑问。
猜你喜欢
  • 2012-12-14
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多