Grails:拆分包含管道的字符串

Posted

技术标签:

【中文标题】Grails:拆分包含管道的字符串【英文标题】:Grails: Splitting a string that contains a pipe 【发布时间】:2011-04-20 01:02:27 【问题描述】:

我正在尝试拆分 String。简单的例子工作:

groovy:000> print "abc,def".split(",");
[abc, def]===> null
groovy:000>

但是我需要在管道上拆分它而不是逗号,但我没有得到想要的结果:

groovy:000> print "abc|def".split("|");
[, a, b, c, |, d, e, f]===> null
groovy:000>

所以我的第一选择当然是从管道 (|) 切换到逗号 (,) 作为分隔符。

但现在我很感兴趣:为什么这不起作用?逃离管道 (\|) 似乎没有帮助:

groovy:000> print "abc|def".split("\|");
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpected char: '\' @ line 1, column 24.
   print "abcdef".split("\|");
                          ^

1 error
|
        at java_lang_Runnable$run.call (Unknown Source)
groovy:000>

【问题讨论】:

【参考方案1】:

你需要在\\|上拆分。

【讨论】:

您能举个例子吗?是不是和我上次提供的sn-p代码一样? @Tom,这是一个格式问题,他的意思是\\|。您需要转义 \ 以便在字符串中对其进行解释,这样它就可以转义 | @Colin 非常感谢。没有发现格式问题。我很抱歉。 @Colin:感谢您为我解决这个问题。 为什么|符号只有格式有问题?其他人工作正常。 @汤姆【参考方案2】:

您必须转义管道,因为它在正则表达式中确实具有特殊含义。但是,如果您使用引号,则还必须转义斜线。基本上,有两个选择:

asserts "abc|def".split("\\|") == ['abc','def']

或使用/ 作为字符串分隔符以避免额外的转义

asserts "abc|def".split(/\|/) == ['abc','def']

【讨论】:

谢谢! / 看起来很熟悉 :) +1 用于解释和正确格式的演示。我不知道为什么另一个答案是得到所有的爱,这个要好得多。

以上是关于Grails:拆分包含管道的字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥单管道字符会混淆java拆分方法? [复制]

Grails:验证包含分隔的电子邮件地址列表的字符串

在大写字母或数字上拆分字符串

文本文件字符串拆分然后将每个元素输出到视图表中

如何在awk中将分隔字符串拆分为数组?

如何拆分包含字符串的列