分裂字符串
你可以在特定的分隔字符或正则表达式上拆分 String
,你可以使用具有以下签名的 String.split()
方法:
public String[] split(String regex)
请注意,分隔字符或正则表达式将从生成的字符串数组中删除。
使用分隔符的示例:
String lineFromCsvFile = "Mickey;Bolton;12345;121216";
String[] dataCells = lineFromCsvFile.split(";");
// Result is dataCells = { "Mickey", "Bolton", "12345", "121216"};
使用正则表达式的示例
String lineFromInput = "What do you need from me?";
String[] words = lineFromInput.split("\\s+"); // one or more space chars
// Result is words = {"What", "do", "you", "need", "from", "me?"};
你甚至可以直接拆分 String
文字:
String[] firstNames = "Mickey, Frank, Alicia, Tom".split(", ");
// Result is firstNames = {"Mickey", "Frank", "Alicia", "Tom"};
警告 :不要忘记该参数始终被视为正则表达式。
"aaa.bbb".split("."); // This returns an empty array
在前面的示例中,.
被视为与任何字符匹配的正则表达式通配符,并且由于每个字符都是分隔符,因此结果为空数组。
基于分隔符拆分,该分隔符是正则表达式元字符
正则表达式中以下字符被视为特殊字符(也称为元字符)
< > - = ! ( ) [ ] { } \ ^ $ | ? * + .
要根据上述分隔符之一拆分字符串,你需要使用\\
或使用 Pattern.quote()
来转义它们:
-
使用
Pattern.quote()
:String s = "a|b|c"; String regex = Pattern.quote("|"); String[] arr = s.split(regex);
-
转义特殊字符:
String s = "a|b|c"; String[] arr = s.split("\\|");
拆分删除空值
split(delimiter)
默认从结果数组中删除尾随的空字符串。要关闭此机制,我们需要使用重载版本的 split(delimiter, limit)
,并将限制设置为负值
String[] split = data.split("\\|", -1);
split(regex)
内部返回 split(regex, 0)
的结果。
limit 参数控制模式的应用次数,因此会影响结果数组的长度。
如果限制 n 大于零,那么模式将最多应用 n - 1 次,数组的长度将不大于 n ,并且数组的最后一个条目将包含超出最后一个匹配分隔符的所有输入。
如果 n 为负,则模式将被应用尽可能多次,并且数组可以具有任何长度。
如果 n 为零,那么模式将被应用尽可能多的次数,该数组可以具有任何长度,并且将丢弃尾随的空字符串。
分裂为 StringTokenizer
除了 split()
方法,字符串也可以使用 StringTokenizer
进行拆分。
StringTokenizer
比 String.split()
更具限制性,而且使用起来也有点困难。它主要用于拉出由一组固定字符分隔的标记(以 String
的形式给出)。每个角色都将充当分隔符。由于这个限制,它的速度是 tihuan 的两倍 18。
默认字符集是空格(\t\n\r\f
)。以下示例将分别打印出每个单词。
String str = "the lazy fox jumped over the brown fence";
StringTokenizer tokenizer = new StringTokenizer(str);
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
这将打印出来:
the
lazy
fox
jumped
over
the
brown
fence
你可以使用不同的字符集进行分隔。
String str = "jumped over";
// In this case character `u` and `e` will be used as delimiters
StringTokenizer tokenizer = new StringTokenizer(str, "ue");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
这将打印出来:
j
mp
d ov
r