我想在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/