淺談String.split()遇到空字符串的幾種情況
Java中的我們可以利用split把字符串按照指定的分割符進行分割,然后返回字符串?dāng)?shù)組
split 方法
該方法的作用是:將一個字符串分割為子字符串,然后將結(jié)果作為字符串?dāng)?shù)組返回。
stringObj.split([separator,[limit]])
stringObj
必選項。要被分解的 String 對象或文字,該對象不會被split方法修改。
separator
可選項。字符串或正則表達式對象,它標識了分隔字符串時使用的是一個還是多個字符。如果忽略該選項,返回包含整個字符串的單一元素數(shù)組。
limit
參數(shù)控制模式應(yīng)用的次數(shù),因此影響所得數(shù)組的長度。如果該限制 n 大于 0,則模式將被最多應(yīng)用 n - 1 次,數(shù)組的長度將不會大于 n,而且數(shù)組的最后一項將包含所有超出最后匹配的定界符的輸入。
如果 n 為非正,那么模式將被應(yīng)用盡可能多的次數(shù),而且數(shù)組可以是任何長度。如果 n 為 0,那么模式將被應(yīng)用盡可能多的次數(shù),數(shù)組可以是任何長度,并且結(jié)尾空字符串將被丟棄。
會遇到以下幾種情況:
1.空字符串不被解析
public class test {
public static void main(String[] args) {
String str = "1,2,3,4,,,";
String[] arr = str.split(",");
for (String string : arr) {
System.out.println("str"+string);
}
System.out.println(arr.length);
}
}
結(jié)果1:

2.最后一個分隔符被分的字符串不為空時,其余空字符串可被解析。
public class test {
public static void main(String[] args) {
String str = "1,2,3,4,,,5";
String[] arr = str.split(",");
for (String string : arr) {
System.out.println("str"+string);
}
System.out.println(arr.length);
}
}
結(jié)果2:

但是在實際開發(fā)的時候不能保證最后一個分隔符被分的字符串為不空,所以在用split()這個方法后再取被分隔的字符串?dāng)?shù)組的時候有時候就出現(xiàn)數(shù)據(jù)越界的問題(最后一個分隔符被分的字符串為空)
想到了一個方法是split([separator,[limit]]) ,后面把limit賦值成比該字符串被分隔成字符數(shù)組后數(shù)組的長度大很多的值,這能保證所有為空的都能被解析,這正應(yīng)了api里的解釋:
3.如果該限制 n 大于 0,則模式將被最多應(yīng)用 n - 1 次(此時n為1000)
public class test {
public static void main(String[] args) {
String str = "1,2,3,4,,,";
String[] s = str.split(",",1000);
for (String string : s) {
System.out.println("str"+string);
}
System.out.println(s.length);
}
}
結(jié)果3:

4.如果把limit設(shè)置為非正,也能全部解析如:
public class test {
public static void main(String[] args) {
String str = "1,2,3,4,,,";
String[] s = str.split(",",-1);
for (String string : s) {
System.out.println("str"+string);
}
System.out.println(s.length);
}
}
結(jié)果4:

當(dāng)String str = "1,2,3,4,,,5";時分別與上述結(jié)果3,4一致。
1.當(dāng)參數(shù)為整數(shù)的時候,只需要截取前幾個,需要幾個截取幾個,這個不用多說。
Java代碼
String line = "aa,bb,cc,dd,,,," ;
System.out.println(line.split( "," , 6 ).length);
輸出結(jié)果為 6 ,limit參數(shù)指定幾個,輸出幾個,最多為 8 個
2.當(dāng)參數(shù)為零的時候,和split()一樣,截圖盡可能多的字符串(其實不是最多的)。
Java代碼
String line = "aa,bb,cc,dd,,,," ;
System.out.println(line.split( "," , 0 ).length);
輸出結(jié)果為 4
3.當(dāng)參數(shù)為負的時候,即使后面有空的串,也會輸出到最大
Java代碼
String line = "aa,bb,cc,dd,,,," ;
System.out.println(line.split( "," ,- 1 ).length);
輸出結(jié)果為 8
注意:
1、如果用“.”作為分隔的話,必須是如下寫法,String.split("\\."),這樣才能正確的分隔開,不能用String.split(".");
2、如果用“|”作為分隔的話,必須是如下寫法,String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|");
以上這篇淺談String.split()遇到空字符串的幾種情況就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA2020導(dǎo)入非maven項目并部署tomcat的方法
這篇文章主要介紹了IDEA 2020 導(dǎo)入非maven項目并部署tomcat的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Spring Cloud Gateway實現(xiàn)灰度發(fā)布方案
灰度發(fā)布是在微服務(wù)中的表現(xiàn)為同一服務(wù)同時上線不同版本,讓一部分用戶使用新版本來驗證新特性,如果驗證沒有問題,則將所有用戶都遷移到新版本上,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下2023-12-12
Spark學(xué)習(xí)筆記之Spark SQL的具體使用
這篇文章主要介紹了Spark學(xué)習(xí)筆記之Spark SQL的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
如何使用eclipse搭建maven多module項目(構(gòu)建父子項目)
這篇文章主要介紹了如何使用eclipse搭建maven多module項目(構(gòu)建父子項目) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
SpringBoot整合mybatis-plus進階詳細教程
本文主要對mybatis-plus的條件構(gòu)造器、AR模式、插件、逆向工程、自定義全局操作、公共字段自動填充等知識點進行講解,需要的朋友參考下吧2021-09-09
Java Socket聊天室編程(一)之利用socket實現(xiàn)聊天之消息推送
這篇文章主要介紹了Java Socket聊天室編程(一)之利用socket實現(xiàn)聊天之消息推送的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
Spring Bean實例的創(chuàng)建及構(gòu)造器的挑選
這篇文章主要介紹了Spring Bean實例的創(chuàng)建及構(gòu)造器的挑選,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04
SpringSecurity?用戶帳號已被鎖定的問題及解決方法
這篇文章主要介紹了SpringSecurity?用戶帳號已被鎖定,本文給大家分享問題原因及解決方式,需要的朋友可以參考下2023-12-12

