Java字符串拆分与多字符分隔符

时间:2012-09-11 17:34:14

标签: java string split character

我对Java很新,我认为这与其他语言一样。

对于字符串:

String line = "3::Daniel::Louis||##2::Leon: the Professional::1994||6::Jean::Reno||7::Gary::Oldman||8::Natalie::Portman||##3::Scarface::1983||9::Al::Pacino||10::Michelle::Pfeiffer";

我希望每隔||##拆分一次。

可是:

for(String s : line.split("||##")) {
    System.out.println("|"+s+"|");
 }

返回:

||
|3|
|:|
|:|
|D|
|a|
|n|
|i|

......等等。

我在期待:

3::Daniel::Louis

Leon: the Professional

......等等。

我做错了什么?

7 个答案:

答案 0 :(得分:12)

你必须逃避|字符,因为它是逻辑OR的正则表达式字符

所以我会用

line.split("\\|\\|##"))

请注意,您必须转义斜杠,这就是我使用

的原因
\\|

而不是

\|

逃避那个元字符

答案 1 :(得分:2)

public String[] split(String regex) 

答案 2 :(得分:1)

听起来你想要这样的东西:

Pattern p = Pattern.compile("\\|\\|##", Pattern.LITERAL)  
String[] result = p.split(myString)  

我知道您的分隔符中可以包含多个字符,并且您可以从输出字符串中排除分隔符。

知道上面的示例是否适用于您的方案完全;您可能需要进行一些实验(例如,使用“\”将“转义”正则表达式“元字符”)。

这是Pattern.compile的Javadoc:

这里有关于Java正则表达式语法的更多信息:

答案 3 :(得分:0)

你需要逃避障碍:|是正则表达式中的一个特殊字符。

使用:

for(String s : line.split("\\|\\|##")) {

或者,您可以使用\Q\E强制按字面意思使用整个模式:

for(String s : line.split("\\Q||##\\E")) {

这可能与您从Pattern.quote获得的模式相同。

|允许您在正则表达式中指定可选模式。您的正则表达式相当于|##,或者没有 OR ## 。这会在空字符串周围或输入中的每个字符之间分开。

请参阅Pattern的{​​{3}}。

答案 4 :(得分:0)

您应该转义|个字符:

for (String s : line.split("\\|\\|##"))

答案 5 :(得分:0)

你必须逃避'|'喜欢这个\ |

答案 6 :(得分:0)

Gilberto的解决方案在这种情况下可以正常工作,但您可能需要查看guava。它有很多非常有用的实用程序类,包括字符串拆分器。有了它,你可以写:

Iterable<String> frags = Splitter.on("||##").split(line);
// Do whatever with the iterable...maybe you just want a list?
// List<String> fragList = Lists.newArrayList(frags);