如何在忽略/?的情况下用指定的分隔符拆分java中的字符串?

时间:2015-04-02 04:49:50

标签: java arrays regex string split

我试着阅读有关正则表达式和逃避的内容,但没有运气。

我有一个看起来像这样的字符串:

String s = "4/18/2015|Planned|Linux|Maintenance";

我想用分隔符分割它' |' :

String[] tokens = s.split("|");

我期待的正确结果

tokens[0] is "4/18/2015", 
tokens[1] is "Planned", 
tokens[2] is "Linux", 
token[3] is "Maintenance", 

然而它给了我一些奇怪的结果:

tokens[0] is null
tokens[1] is 4
tokens[2] is /
and tokens[3] is 1

我猜它是因为斜线' /'在约会的日期。我试图搜索许多现有问题并尝试建议的方法,但无济于事。

3 个答案:

答案 0 :(得分:4)

@mushfek0001 got it right

大多数正则表达方言中的管道是交替的元字符;基本上你要求正则表达式引擎在这里做的是:“拆分空字符串或...空字符串”。

并且,呃,这意味着你每次都可能变空,除了正则表达式引擎不是傻瓜,如果在分割中检测到空匹配,引擎会在再次分裂之前前进一个字符...因此你的结果(不知道为什么第一个元素是null而不是空字符串。)

因此,您应该分为"\\|",而不是"|"

此外,如果您反复执行此操作,请改为使用Pattern

private static final Pattern PIPE = Pattern.compile("\\|");

// ...

final String[] tokens = PIPE.split(yourInput);

答案 1 :(得分:3)

只需使用

split("\\x7C")

split("\\|")

在拆分管道char'|'时,您需要转义或使用相应的unicode值。

答案 2 :(得分:2)

转义管道字符:

s.split("\\|");

因为正则表达式中的管道符号表示OR,所以要转义它需要\|,但在正则表达式中,您还需要转义\,以便\\|可以正常工作。

或如mushfek0001建议:

split("\\x7C")