2013-05-13 52 views
6

我在我做了以下的情况:分割字符串人物性格

final String[] columns = row.split(delimiter.toString()); 

delimiter是一个字符。

当我需要根据选项卡提供\t作为分隔符时,此工作正常。但是,当我想要在管道上进行拆分时,我传递了|的分隔符,并且这不能按预期工作。

我读过几篇关于如何|是一个特殊的字符,这意味着空或空,因此它会分裂遇到的每个字符,但是,我不希望这种行为。

我可以做一个简单的检查,在我的代码,这条管道的情况下,并围绕这一问题得到:

if ("|".equals(delimiter.toString())) { 
    columns = row.split("\\" + delimiter.toString()); 
} 
else { 
    columns = row.split(delimiter.toString()); 
} 

但我不知道是否有一个更简单的方法来解决这个问题。另外,是否还有其他需要考虑的特殊字符?|

回答

18

尝试:

import java.util.regex.Pattern; 

... 

final String[] columns = row.split(Pattern.quote(delimiter.toString())); 

至于其他元字符,因为他们是所谓的,这里是从String Literals教程报价:

这个API还支持一些特殊的影响模式匹配方式的字符。

...

元字符通过这个API支持的是:<([{\^- = $ |!]})* +>

见:?

+0

谢谢,这工作完美。我会在11分钟内接受。 – 2013-05-13 15:01:15

4
  1. 您可以使用StringUtils从阿帕奇共享郎里面装有方法接受纯文本,而不是正则表达式:

    public static String[] split(String str, char separatorChar) 
    public static String[] split(String str, String separatorChars) 
    
  2. 您还可以使用StringTokenzier类,它不指望一个正则表达式分隔符。