我有一个字段,其值是由|
(管道)分隔的连接字段集,
注意: - 转义字符也是管道。
鉴于:
AB|||1|BC||DE
必需:
["AB|","1","BC|DE"]
如何将给定的字符串拆分成数组或列表而不逐个字符地迭代(即使用正则表达式或任何其他方法)以获得所需的内容?
答案 0 :(得分:1)
如果有未使用的字符,您可以替换双管道,您可以这样做:
groovy:000> s = "AB|||1|BC||DE"
===> AB|||1|BC||DE
groovy:000> Arrays.asList(s.replaceAll('\\|\\|', '@').split('\\|'))*.replaceAll(
'@', '|')
===> [AB|, 1, BC|DE]
使用魔术字符序列清理并使用tokenize,它看起来像:
pipeChars = 'ZZ' // or whatever
s.replaceAll('\\|\\|', pipeChars).tokenize('\\|')*.replaceAll(pipeChars, '|')
当然,这假设在将字符串分组成对的字符串中从左到右是有效的,因此每对在输出中成为单个管道,而剩余的管道成为分隔符。当你开始使用像
这样的东西时['AB|', '|1', 'BC|DE']
编码为
AB|||||1|BC||DE
然后整个编码方案崩溃了,完全不清楚如何对管道对进行分组以恢复原始值。 'X ||||| Y'可以由['X |','| Y']或['X ||','Y']或['X','|| Y']生成,没有办法知道它是什么。
答案 1 :(得分:0)
如何使用split('|')方法 - 但是根据你提供的方法,看起来你也可以拥有'|'字段值中的字符。您是否有机会将分隔符更改为不在结果值中的内容?