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



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

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

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

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

为此,做起来很简单

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

但是,当我有一个特殊的正则表达式字符的分隔符时,这不起作用:

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

所以。。。 有没有办法在不尝试应用额外的正则表达式规则的情况下拆分显式字符上的字符串? 我觉得我一定错过了一些非常简单的东西。

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

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

如果您使用字符类型,则无需担心字符类型Pattern

Pattern regex = Pattern.compile(s.charAt(4));
Matcher matcher = regex.matcher(yourString);
if (matcher.find()){
    //do something
}
您可以在输入分隔

符之前在分隔符上运行 Pattern.quote。 这将创建一个字符串文字并转义任何正则表达式特定的字符:

delimiter = Pattern.quote(delimiter);

StringUtils.split(s, delimiter);

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

StringUtilsApacheCommons库的一部分,该库有大量有用的方法。值得一看,可以为您节省一些时间。

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

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

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

最新更新