1. 程式人生 > >String.split()遇到空字串的幾種情況

String.split()遇到空字串的幾種情況

Java中的我們可以利用split把字串按照指定的分割符進行分割,然後返回字串陣列
   split 方法
      該方法的作用是:將一個字串分割為子字串,然後將結果作為字串陣列返回。
      stringObj.split([separator,[limit]]) 
       stringObj
             必選項。要被分解的 String 物件或文字,該物件不會被split方法修改。
       separator 
            可選項。字串或正則表示式物件,它標識了分隔字串時使用的是一個還是多個字元。如果忽略該選項,返回包含整個字串的單一元素陣列。 
       limit
            引數控制模式應用的次數,因此影響所得陣列的長度。如果該限制 n 大於 0,則模式將被最多應用 n - 1 次,陣列的長度將不會大於 n,而且陣列的最後一項將包含所有超出最後匹配的定界符的輸入。如果 n 為非正,那麼模式將被應用盡可能多的次數,而且陣列可以是任何長度。如果 n 為 0,那麼模式將被應用盡可能多的次數,陣列可以是任何長度,並且結尾空字串將被丟棄。

會遇到以下幾種情況:

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);
	}
}
結果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);
	}
}
結果2:


    但是在實際開發的時候不能保證最後一個分隔符被分的字串為不空,所以在用split()這個方法後再取被分隔的字串陣列的時候有時候就出現資料越界的問題(最後一個分隔符被分的字串為空)
     想到了一個方法是split([separator,[limit]]) ,後面把limit賦值成比該字串被分隔成字元陣列後陣列的長度大很多的值,這能保證所有為空的都能被解析,這正應了api裡的解釋:

3.如果該限制 n 大於 0,則模式將被最多應用 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);
	}
}
結果3:

4.如果把limit設定為非正,也能全部解析如:

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);
	}
}
結果4:


當String str = "1,2,3,4,,,5";時分別與上述結果3,4一致。

1.當引數為整數的時候,只需要擷取前幾個,需要幾個擷取幾個,這個不用多說。 


Java程式碼 
String line =  "aa,bb,cc,dd,,,," ;  
System.out.println(line.split( "," , 6 ).length);  
輸出結果為 6 ,limit引數指定幾個,輸出幾個,最多為 8 個  
 

2.當引數為零的時候,和split()一樣,截圖儘可能多的字串(其實不是最多的)。 
Java程式碼  
String line =  "aa,bb,cc,dd,,,," ;  
System.out.println(line.split( "," , 0 ).length);  
輸出結果為 4   

3.當引數為負的時候,即使後面有空的串,也會輸出到最大 
Java程式碼  
String line =  "aa,bb,cc,dd,,,," ;  
System.out.println(line.split( "," ,- 1 ).length);  
輸出結果為 8   


注意:
1、如果用“.”作為分隔的話,必須是如下寫法,String.split("\\."),這樣才能正確的分隔開,不能用String.split(".");
2、如果用“|”作為分隔的話,必須是如下寫法,String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|");

相關推薦

String.split()遇到字串情況

Java中的我們可以利用split把字串按照指定的分割符進行分割,然後返回字串陣列    split 方法       該方法的作用是:將一個字串分割為子字串,然後將結果作為字串陣列返回。       stringObj.split([separator,[limit]])

關於Java指標異常的情況的總結

1:NullPointerException由RuntimeException派生出來,是一個執行級別的異常。意思是說可能會在執行的時候才會被丟擲,而且需要看這樣的執行級別異常是否會導致你的業務邏輯中斷。  2:空指標異常發生在物件為空,但是引用這個物件的方法。例如: String s =

關於Java指標異常的情況的總結(java.lang.NullPointerException)

在外文網站上看到的: 1. Calling the instance method of a null object.  2. Accessing or modifying the field of 

iOS判斷字串中包含數字和字母的情況

//直接呼叫這個方法就行 -(int)checkIsHaveNumAndLetter:(NSString*)password{ //數字條件 NSRegularExpression *tNum

當表名可控的註入遇到了Describe時的情況

影響 bold 求學 ide 構造 完全 card 別名 pre 轉自:http://www.yulegeyu.com/2017/04/16/%E5%BD%93%E8%A1%A8%E5%90%8D%E5%8F%AF%E6%8E%A7%E7%9A%84%E6%B3%A8%E5

[轉]DB2中需要REORG操作的情況

sting line lte font -type compress win rmi col 問題: 在DB2數據庫中,修改完表的結構時,是否需要對表做一個reorg操作才能使表的狀態恢復正常? 答:有以下4種操作,需要對表做reorg操作 1. SET DATA TYPE

Mysql索引會失效的情況分析

status 過程 ges 此外 ont 其中 like hand ext 轉自:http://www.jb51.net/article/50649.htm 在做項目的過程中,難免會遇到明明給mysql建立了索引,可是查詢還是很緩慢的情況出現,下面我們來具體分析下這種

POI導出Excel的情況

scrip equals eth for get write else des tco 第一種:常見導出【已知表頭(長度一定),已知表數據(具體一個對象的集合,並已知對象各個屬性的類型)】第二種:不常見導出【已知表頭(長度不定),已知表數據(沒有具體對象,裝在Strin

MySQL索引失效的情況

模糊 運算 全表掃描 mysq 子節點 葉子節點 數據 都是 記錄 1.索引不存儲null值 更準確的說,單列索引不存儲null值,復合索引不存儲全為null的值。索引不能存儲Null,所以對這列采用is null條件時,因為索引上根本 沒Null值,不能利用到索引,只能全

java.lang.NullPointerException報錯的情況

style == poi 就會 string arr 不存在 判斷 對象 java.lang.NullPointerException報錯的幾種情況: 1.字符串變量未初始化; 2.接口類型的對象沒有用具體的類初始化,比如:   List stuList ;這種情況就會報空

Unity_C#判斷字符串為用法

tps rem ref har http string 使用 比較 itl 轉載自CSDN_FreeSon; https://blog.csdn.net/biaobiao1217/article/details/39047963 字符串判斷:string在C#中是一個引用類

java中出現內存溢出的情況

xss 除了 占用 memory 兩個 存在 text spa 調用 情況一:java.lang.OutOfMemoryError: Java heap space 原因:java堆內存不足,可能是真的不足,也可能是程序中有死循環 方案:1、調整JVM參數-Xms2048m

spring@value取不到值的情況

spring@value取不到值的幾種情一,spring組件重寫構造方法,在構造方法中引用@value為null由於spring實例化順序為先執行構造方法,再註入成員變量,所以序為先執行構造方法,再註入成員變量,所以ing實例化順取值為null解決辦法為:再寫一個常量類,在常量類中引用@value,再在構造方

總結遇到的elasticsearch啟動失敗的情況及解決

elasticsearch1、使用root用戶啟動失敗 在有一次搭建elasticsearch的時候,使用systemctl啟動elasticsearch失敗,然後在bin目錄下面去使用啟動腳本啟動,發現報錯不能用root用戶啟動,報“Caused by: java.lang.RuntimeException

PHP-判斷條件為false的情況

it is als 註意 浮點 條件 tro 其中 條件判斷 lse 1.整型的0 整型的0 在判斷條件時為false <?php $str = 0; if ($str) { echo ‘It is true!‘; } else { echo ‘It

Flask中定義模型類的情況

datetime hash avatar register sso boolean tar review login from datetime import datetime from werkzeug.security import generate_password

Spring 事務不起作用的情況

service() true bean 每次 語句 imp 作用 stc current 1:必須是runtime異常,方法不要有try catch語句。 2:service 中 @Service() public class AServiceImpl1 imple

JVM之記憶體溢位的情況以及可以採取的解決方案

開發中遇到過以下三種記憶體溢位的狀況: 一、 java.lang.OutOfMemoryError: Java heap space 二、 java.lang.OutOfMemoryError: PermGen space 三、 java.lang.OutO

MySQL刪除表的情況

1、drop table table_name:刪除表全部資料和結構,立刻釋放磁碟空間,不管是innodb和myisam 2、truncate table table_name:刪除表全部資料,表結構不變,立刻釋放磁碟空間,不管是innodb和myisam 3、delete from

Java String 後面加空格的方法

1.StringUtils import org.apache.commons.lang3.StringUtils;   StringBuilder mBuffer1 = new StringBuilder("");     &nbs