java程序中經常通過split截取字符串來取得其中的關鍵字。但是由於其中不同操作系統或者不同作者的習慣,經常會出現不同數量的空格,例如" "(3個空格);或者出現制表符、Tab符號" "(Tab鍵)。因此合理的通過任意數量的空白字符切割獲取關鍵字非常重要。下面是我一步步摸索找出解決方案的過程。結局很重要,整個的思維過程也是相當有意義的。
1. 問題的提出:
String sample = "a b c d";
String[] arrays = sample.split(" ");
for(String s : arrays)
{
System.out.println(s);
}
由於字符串中出現了不定個數的空格,所以截取的字符串數組中肯定會出現空格字符串,結果如下:
利用java正則表達式的貪婪原則,提出解決方法:
String sample = "a b c d";
String[] arrays = sample.split(" +");
for(String s : arrays)
{
System.out.println(s);
}
結果:
2.另一個問題的提出:
id userName sex 0 root male 1 user1 female
我要從上述文件讀取每一行字符串並且split,但是由於格式化以及各人之間的習慣,每一行中間都充斥着空格和Tab鍵,因此第一種解決方案無法運用到這上面去。想到正則表達式中有“\s”代表任意空白字符,這里便可以解決問題:
String sample1 = "0 root male";
String sample2 = "1 user1 female";
String[] arrays = sample1.split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}
System.out.println("----------------------");
arrays = sample2.split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}
結果:
3.字符串前后含有空白字符的情況:
String sample1 = " 0 root male";
String[] arrays = sample1.split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}
這時候打印結果會在前面多一個空的字符串,解決方法是在split之前先進行trim()操作,由於trim()支持級聯調用,可以寫成下面的方式:
String sample1 = " 0 root male";
String[] arrays = sample1.trim().split("\\s+");
for(String s : arrays)
{
System.out.println(s);
}
結果Ok了。



