java - 分割字符串而不丢失分割字符

标签 java regex string split

我想在Java中分割一个字符串,像这样的字符串,普通的分割函数会分割字符串,同时丢失分割字符:

String = "123{456]789[012*";

我想将字符串拆分为 {,[,],* 字符,但不想丢失它们。我的意思是我想要这样的结果:

part 1 = 123{
part 2 = 456]
part 3 = 789[
part 4 = 012*

通常 split 函数会这样拆分:

part 1 = 123
part 2 = 456
part 3 = 789
part 4 = 012

可能吗?

最佳答案

您可以使用零宽度先行/后行表达式来定义一个正则表达式,该正则表达式与目标字符之一和任何非目标字符之间的零长度字符串相匹配:

(?<=[{\[\]*])(?=[^{\[\]*])

将此表达式传递给String.split:

String[] parts = "123{456]789[012*".split("(?<=[{\\[\\]*])(?=[^{\\[\\]*])");

如果您有一个连续的分隔符字符 block ,它将在整个 block 的末尾拆分一次,即字符串 "123{456][789[012*" 将拆分为四个 block "123{", "456][", "789[", "012*"。如果您只使用第一部分(后视)

(?<=[{\[\]*])

那么你会得到五个部分“123{”,“456]”,“[”,“789[”,“012*”

关于java - 分割字符串而不丢失分割字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892028/

相关文章:

java - 在内存中保留最大整数数组所需的空间

正则表达式删除一行中第一个空格出现之前的所有内容?

string - 使用perl计算字符串中的大写字母

c++ - 删除字符串中具有相同值的任何相邻字母的 “pair”

java - 在 Struts2 中检索多选列表的选定值

java - 如何实现动态选择?

c# - 如何循环遍历XML中的所有节点并根据C#中的值更改节点值?

asp.net - 仅用于电话号码和分机的正则表达式

string - 如何在 Erlang 中将整数转换为字符串?

java - Junit中如何处理测试数据?