繁体   English   中英

Java String Split on任何字符(包括正则表达式特殊字符)

[英]Java String Split on any character (including regex special characters)

我确定我只是在这里俯瞰...

有没有一种简单的方法可以在不应用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规则的情况下将字符串拆分为显式字符? 我觉得我一定缺少一些简单的东西。

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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM