6

我有一个案例,我正在执行以下操作:

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

delimiter角色在哪里。

\t当我需要通过提供作为分隔符来基于制表符进行拆分时,这可以正常工作。但是,当我想在管道上拆分时,我传入了一个分隔符,|这不能按预期工作。

我已经阅读了几篇关于|特殊字符如何表示 null 或空的帖子,因此它会在遇到的每个字符上拆分,但是,我不想要这种行为。

我可以在我的代码中为这个管道案例做一个简单的检查并解决这个问题:

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

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

4

2 回答 2

18

尝试:

import java.util.regex.Pattern;

...

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

关于其他元字符,因为它们被称为,这是字符串文字教程的引用:

此 API 还支持许多影响模式匹配方式的特殊字符。

...

此 API 支持的元字符有:<([{\^-=$!|]})?*+.>

看:

于 2013-05-13T14:59:34.047 回答
4
  1. 您可以使用StringUtilsApache Commons Lang,它配备了接受纯文本而不是正则表达式的方法:

    public static String[] split(String str, char separatorChar)
    public static String[] split(String str, String separatorChars)
    
  2. 您也可以使用StringTokenzier该类,它不需要正则表达式作为分隔符。

于 2013-05-13T15:03:16.283 回答