淺談String.split()遇到空字符串的幾種情況
Java中的我們可以利用split把字符串按照指定的分割符進(jìn)行分割,然后返回字符串?dāng)?shù)組
split 方法
該方法的作用是:將一個(gè)字符串分割為子字符串,然后將結(jié)果作為字符串?dāng)?shù)組返回。
stringObj.split([separator,[limit]])
stringObj
必選項(xiàng)。要被分解的 String 對(duì)象或文字,該對(duì)象不會(huì)被split方法修改。
separator
可選項(xiàng)。字符串或正則表達(dá)式對(duì)象,它標(biāo)識(shí)了分隔字符串時(shí)使用的是一個(gè)還是多個(gè)字符。如果忽略該選項(xiàng),返回包含整個(gè)字符串的單一元素?cái)?shù)組。
limit
參數(shù)控制模式應(yīng)用的次數(shù),因此影響所得數(shù)組的長度。如果該限制 n 大于 0,則模式將被最多應(yīng)用 n - 1 次,數(shù)組的長度將不會(huì)大于 n,而且數(shù)組的最后一項(xiàng)將包含所有超出最后匹配的定界符的輸入。
如果 n 為非正,那么模式將被應(yīng)用盡可能多的次數(shù),而且數(shù)組可以是任何長度。如果 n 為 0,那么模式將被應(yīng)用盡可能多的次數(shù),數(shù)組可以是任何長度,并且結(jié)尾空字符串將被丟棄。
會(huì)遇到以下幾種情況:
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.最后一個(gè)分隔符被分的字符串不為空時(shí),其余空字符串可被解析。
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:
但是在實(shí)際開發(fā)的時(shí)候不能保證最后一個(gè)分隔符被分的字符串為不空,所以在用split()這個(gè)方法后再取被分隔的字符串?dāng)?shù)組的時(shí)候有時(shí)候就出現(xiàn)數(shù)據(jù)越界的問題(最后一個(gè)分隔符被分的字符串為空)
想到了一個(gè)方法是split([separator,[limit]]) ,后面把limit賦值成比該字符串被分隔成字符數(shù)組后數(shù)組的長度大很多的值,這能保證所有為空的都能被解析,這正應(yīng)了api里的解釋:
3.如果該限制 n 大于 0,則模式將被最多應(yīng)用 n - 1 次(此時(shí)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";時(shí)分別與上述結(jié)果3,4一致。
1.當(dāng)參數(shù)為整數(shù)的時(shí)候,只需要截取前幾個(gè),需要幾個(gè)截取幾個(gè),這個(gè)不用多說。
Java代碼
String line = "aa,bb,cc,dd,,,," ;
System.out.println(line.split( "," , 6 ).length);
輸出結(jié)果為 6 ,limit參數(shù)指定幾個(gè),輸出幾個(gè),最多為 8 個(gè)
2.當(dāng)參數(shù)為零的時(shí)候,和split()一樣,截圖盡可能多的字符串(其實(shí)不是最多的)。
Java代碼
String line = "aa,bb,cc,dd,,,," ;
System.out.println(line.split( "," , 0 ).length);
輸出結(jié)果為 4
3.當(dāng)參數(shù)為負(fù)的時(shí)候,即使后面有空的串,也會(huì)輸出到最大
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)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA2020導(dǎo)入非maven項(xiàng)目并部署tomcat的方法
這篇文章主要介紹了IDEA 2020 導(dǎo)入非maven項(xiàng)目并部署tomcat的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Spring Cloud Gateway實(shí)現(xiàn)灰度發(fā)布方案
灰度發(fā)布是在微服務(wù)中的表現(xiàn)為同一服務(wù)同時(shí)上線不同版本,讓一部分用戶使用新版本來驗(yàn)證新特性,如果驗(yàn)證沒有問題,則將所有用戶都遷移到新版本上,本文就來介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2023-12-12Spark學(xué)習(xí)筆記之Spark SQL的具體使用
這篇文章主要介紹了Spark學(xué)習(xí)筆記之Spark SQL的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06如何使用eclipse搭建maven多module項(xiàng)目(構(gòu)建父子項(xiàng)目)
這篇文章主要介紹了如何使用eclipse搭建maven多module項(xiàng)目(構(gòu)建父子項(xiàng)目) ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12SpringBoot整合mybatis-plus進(jìn)階詳細(xì)教程
本文主要對(duì)mybatis-plus的條件構(gòu)造器、AR模式、插件、逆向工程、自定義全局操作、公共字段自動(dòng)填充等知識(shí)點(diǎn)進(jìn)行講解,需要的朋友參考下吧2021-09-09Java Socket聊天室編程(一)之利用socket實(shí)現(xiàn)聊天之消息推送
這篇文章主要介紹了Java Socket聊天室編程(一)之利用socket實(shí)現(xiàn)聊天之消息推送的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Spring Bean實(shí)例的創(chuàng)建及構(gòu)造器的挑選
這篇文章主要介紹了Spring Bean實(shí)例的創(chuàng)建及構(gòu)造器的挑選,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04SpringSecurity?用戶帳號(hào)已被鎖定的問題及解決方法
這篇文章主要介紹了SpringSecurity?用戶帳號(hào)已被鎖定,本文給大家分享問題原因及解決方式,需要的朋友可以參考下2023-12-12