2015-04-02 66 views
0

我试图阅读关于正则表达式和转义,但没有运气。如何使用指定的分隔符在java中分割字符串,而忽略/?

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

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 

我猜测这是因为斜杠“/ '在那个日子,这是为什么。我试图搜索许多现有的问题,并尝试了建议的方法,但无济于事。

+0

什么是“一些奇怪的结果”? – 2015-04-02 04:50:37

+4

'请帮助我,我会upvote正确的答案,并接受最好的。 '这是非常明显的和预计太:) – vks 2015-04-02 04:51:57

+0

检查了这一点,https://ideone.com/qZcIFF – Nielarshi 2015-04-02 04:56:01

回答

3

只需使用

split("\\x7C") 

split("\\|") 

你需要逃跑或使用相应的Unicode值对管道字符分割时, '|'。

+0

我试着你以前的建议split(“\\ |”),它的工作。我需要接受你的答案,但是这不会让我这样做,它有10分钟的限制。我稍后会接受你的回答。 – hiew1 2015-04-02 04:55:37

+0

这里所说的“十六进制代码”是unicode代码点;请注意,这仅在Java 7以后才可用! – fge 2015-04-02 05:05:40

+0

感谢信息人。进行编辑。 – mushfek0001 2015-04-02 05:09:49

2

逃脱竖线:

s.split("\\|"); 

因为在正则表达式管道标志的含义是OR,所以逃避它,你需要\|但在正则表达式,你需要逃避\也因此\\|会工作。

或作为mushfek0001建议:

split("\\x7C") 
4
@mushfek0001 got it right

大多数正则表达式中的管道是变化的元字符;基本上,你要求正则表达式引擎在这里执行的操作是:“对空字符串或空字符串进行分割”。

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

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

更重要的是,如果你这样做反复,使用Pattern代替:

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

// ... 

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

这是一些不错的信息!!!!!!!!! – vks 2015-04-02 04:59:20

+0

谢谢fge!它有很大帮助!我应该接受你的,但mushfek0001来解决我的问题。非常感谢你,我高举你的答案。 – hiew1 2015-04-02 05:12:56

相关问题