Java字符串拆分任何字符(包括正则表达式特殊字符)

时间:2013-12-20 14:29:03

标签: java string

我确定我只是在这里忽略了一些东西......

是否有一种简单的方法可以在不应用RegEx规则的情况下在显式字符上拆分字符串?

例如,我收到一个带有动态分隔符的字符串,我知道第5个字符定义了分隔符。

String s = "This,is,a,sample";

为此,做起来很简单

String delimiter = String.valueOf(s.charAt(4));
String[] result = s.split(delimiter);

但是,当我的分隔符是一个特殊的RegEx字符时,这不起作用:

String s = "This*is*a*sample";

那么......有没有办法在显式字符上拆分字符串而不尝试应用额外的RegEx规则?我觉得我必须遗漏一些非常简单的东西。

5 个答案:

答案 0 :(得分:8)

split使用正则表达式作为参数。 *是一个元字符,用于匹配正则表达式中的多个字符,您可以使用Pattern#quote来避免解释字符

String[] result = s.split(Pattern.quote(delimiter));

答案 1 :(得分:1)

如果您使用Pattern

,则无需担心字符类型
Pattern regex = Pattern.compile(s.charAt(4));
Matcher matcher = regex.matcher(yourString);
if (matcher.find()){
    //do something
}

答案 2 :(得分:1)

您可以在分隔符上运行Pattern.quote,然后将其输入。这将创建一个字符串文字并转义任何正则表达式特定字符:

delimiter = Pattern.quote(delimiter);

答案 3 :(得分:0)

StringUtils.split(s, delimiter);

这会将分隔符视为一个字符,而不是像正则表达式那样使用它。

StringUtilsApacheCommons库的一部分,它有很多有用的方法。值得一看,将来可以节省一些时间。

答案 4 :(得分:0)

只需将分隔符放在[]之间

String delimiter = "["+s.charAt(4)+"]";
String[] result = s.split(delimiter);

由于[]是正则表达式匹配[]之间的任何字符。您还可以指定分隔符列表,例如 [*,。+-]