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)
[
^
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]
}
当限制处理次数后,其余的将直接返回作为最后一项。