在Java程序中我们经常会用到字符串的分隔,例如分裂 CSV 文件中的数据来获取所有不同的值。Java中提供了一下两个方法来分隔字符串
public String[] split(String regex)public String[] split(String regex, int limit)split方法的作用是根据匹配给定的正则表达式来拆分此字符串。 此方法返回的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。
limit 参数控制模式应用的次数,因此影响所得数组的长度。
如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。 如果 n 等于 0 ,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。例如,字符串 "boo:and:foo" 使用这些参数可生成以下结果:
RegexLimit结果:2{ "boo", "and:foo" }:5{ "boo", "and", "foo" }:-2{ "boo", "and", "foo" }o5{ "b", "", ":and:f", "", "" }o-2{ "b", "", ":and:f", "", "" }o0{ "b", "", ":and:f" }接下来介绍一下分隔符号为特殊字符(正则元字符)时,我们应该如何来进行字符串分隔?
如果分隔的是正则的元字符(.$|()[{^?*+\\),那么这些元字符是不能自己分隔的,否则结果将不会是预期的结果. 在Java中我们需要使用\\元字符来匹配,比如我们需要匹配字符串yveshe|hello中的|我们需要将regex写成\\|.
这里为什要使用2个\\,就需要理解Java中的转义字符\,其实第一个\是转义字符,第二个\是被转义的字符: 转义字符只允许转义\b \t \n \f \r \" \' \\
下面是使用split需要分隔一些正则中特殊字符的2中处理方式:
public static void main(String[] args) { String content = " yveshe|hello"; /* 方式一:使用转义字符转义 */ String[] split1 = content.split("\\|"); System.out.println(Arrays.toString(split1)); System.out.println("*********************"); /* 方式二: 使用Pattern */ String[] split2 = content.split(Pattern.quote("|")); System.out.println(Arrays.toString(split2)); }输出结果
[ yveshe, hello] ********************* [ yveshe, hello]注意点:
split(String regex)底层是调用的split(String regex,0)当limit等于0时结尾空字符串将被丢弃.如果 regex 不匹配输入字符串的任何部分,那么结果数组只有一个元素,即这个字符串.调用此方法的 str.split(regex, n) 形式与表达式Pattern.compile(regex).split(str, n)产生的结果完全相同关于分隔符号为一些特殊的符号时,我们可以使用反斜杠使得特殊字符作为正规字符或者使用Patter来转换字面量的方式,就像我在上面的程序中使用管道(|)来分隔字符串一样。相关Java中Patter的使用方式 相关Java中转义字符和路径符
参考: https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-