分裂字串
你可以在特定的分隔字元或正規表示式上拆分 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