java中split任意數量的空白字符


java程序中經常通過split截取字符串來取得其中的關鍵字。但是由於其中不同操作系統或者不同作者的習慣,經常會出現不同數量的空格,例如"   "(3個空格);或者出現制表符、Tab符號"    "(Tab鍵)。因此合理的通過任意數量的空白字符切割獲取關鍵字非常重要。下面是我一步步摸索找出解決方案的過程。結局很重要,整個的思維過程也是相當有意義的。

   1. 問題的提出:

String sample = "a  b c    d";
String[] arrays = sample.split(" ");
for(String s : arrays)
{
    System.out.println(s);
}

   由於字符串中出現了不定個數的空格,所以截取的字符串數組中肯定會出現空格字符串,結果如下:

   100249510.png

   利用java正則表達式的貪婪原則,提出解決方法:

   

String sample = "a  b c    d";
String[] arrays = sample.split(" +");
for(String s : arrays)
{
    System.out.println(s);
}

   結果:

101130329.png

   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);
}

   結果:

102314640.png

   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了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM