Java String split() 字符串拆分

Java String split() 方法对给定的正则表达式进行匹配拆分,然后返回一个字符串数组

Java String split()方法

split() 有两个重载的方法,第一个入参为正则表达式,第二个限定匹配多少次。

public String[] split(String regex);

public String[] split(String regex, int limit);

入参 regex 必须是格式正确的正则表达式,否则将抛出 PatternSyntaxException

入参 regex 不能为空 null,否则将抛出 NullPointerException

split()方法示例

以 “-” 来拆分”Are-you-ok”。

public static void main(String[] args) {
    String sentence = "Are-you-ok";
    String[] words = sentence.split("-");
    System.out.println(words); // [Ljava.lang.String;@1b6d3586
    System.out.println(Arrays.toString(words));// [Are, you, ok]
}

如果直接输出字符串数组,会打印其地址,所以使用到了 Arrays 工具类来输出字符串数组的内容。

异常情形

正则表达式的格式需要正确:

public static void main(String[] args) {
    String sentence = "Are-you-ok";
    String[] words = sentence.split("[");
}
Exception in thread “main” java.util.regex.PatternSyntaxException: Unclosed character class near index 0
[
^
at java.util.regex.Pattern.error(Pattern.java:1969)
执行结果

正则表达式不能为空

public static void main(String[] args) {
    String sentence = "Are-you-ok";
    String[] words = sentence.split(null);
}
Exception in thread “main” java.lang.NullPointerException
执行结果

Java String split() 示例

逗号分隔

对古诗词拆分一下,注意下面的原文是中文逗号分隔的,输出的数组默认是逗号分隔,但是分隔符号是英文的逗号。

public static void main(String[] args) {
    String sentence = "枯藤,老树,昏鸦";
    String[] words = sentence.split(","); // 这里用分文逗号
    System.out.println(Arrays.toString(words));// [枯藤, 老树, 昏鸦]
}

逗号分隔看起来好像数据没啥变化,实际上数据结构由字符串变为了数组

空格分隔

在正则表达式中,表示空格可以用 \s,但是,\ 是特殊字符,需要使用 \转义,因此空格的书写形式为 \\s

public static void main(String[] args) {
    String sentence = "How are you";
    String[] words = sentence.split(" "); // 这里是空格
    System.out.println(Arrays.toString(words));// [How, are, you]

    String[] words2 = sentence.split("\\s"); // 这里是空格的正则表达式
    System.out.println(Arrays.toString(words2));// [How, are, you]
}

多种分隔符

用多个分隔符分割字符串的 Java 程序,在多个分隔符之间使用正则表达式 OR 运算符 |符号。.在正则表达式中有特殊含义,需要使用 \.转义,同样,\也是特殊符号,需要转义,于是表示一个.的正则表达式需要书写成\\.

public static void main(String[] args) {
    String sentence = "I-love-you.You love me.";
    String[] words = sentence.split("-|\\s|\\."); //
    System.out.println(Arrays.toString(words));// [I, love, you, You, love, me]
}

限定分隔数量

split(String regex, int limit)中的 limit 参数可以限制处理的次数。在该方法找到给定的标记数后,未拆分的字符串的其余部分将作为最后一个标记返回,即使它可能包含分隔符。

public static void main(String[] args) {
    String sentence = "Welcome to mapull website";
    String[] words = sentence.split("\\s", 3); //
    System.out.println(Arrays.toString(words));// [Welcome, to, mapull website]
}

当限制处理次数后,其余的将直接返回作为最后一项。

标签: