2012-03-16 70 views
6

我很確定答案是肯定的,但我只是想確認,從來沒有一種情況,非空字符串(不管它包含什麼)會返回除了有效字符串之外的任何東西作爲數組的第一個成員通過分割返回。使用split返回的數組的第一個元素總是安全的嗎?

換句話說。

String foo = ""; // or "something" or "a b c" or any valid string at all 

String[] bar = foo.split(",")[0]; 

我的理解是,bar永遠不會爲空,分配行也無法失敗。如果在字符串中找不到分隔符,它將返回整個foo作爲返回數組的第一個元素。

+1

這很容易通過簡單地寫檢查這種行爲一個微小的程序,嘗試這種情況下,看看你得到了什麼 – mfrankli 2012-03-16 19:12:28

+0

它是。即使它不包含給定的正則表達式,它總是會返回初始字符串。 – 2012-03-16 19:12:46

+0

@mfrankli,謝謝。這幾乎是有用的建議。很明顯,我可以編寫一個測試程序(並且有)...我正在詢問一些我可能沒有考慮或想到的異常情況。 – 2012-03-16 19:14:19

回答

9

不,It may fail

這將無法ArrayIndexOutOfBound如果foo =","

+1

奇數,我會假設它會返回兩個空字符串並將它們填充爲[0]和[1]。肯定+1,如果你是對的這個.. – 2012-03-16 19:18:08

+0

請訪問鏈接代碼演示 – 2012-03-16 19:18:57

+0

+1非常好的捕獲。 – 2012-03-16 19:23:10

1

(1)如foo爲正則表達式模式的直接匹配,該陣列從split返回具有長度0foo.split[0]將拋出ArrayIndexOutOfBoundsException。 (2)記住String.split如果正則表達式在運行時無效,則可能會拋出PatternSyntaxException

+0

這是非常好的知道,正是我爲什麼認爲這將是很好的問! :) – 2012-03-16 19:15:29

+0

@ Dr.Dredel驗證了Jigar的警告並已更新。我也很驚訝。 – paislee 2012-03-16 19:22:30

+0

請參閱Jigar Joshi的回答。 – 2012-03-16 19:22:47

1

是。 bar將等於字符串「」

.split(「,」)嘗試在逗號後分割,但原始字符串中沒有逗號,因此原始字符串將返回。

將是棘手的是:

String s = ",,,,,,," 

String[] sarray = s.split(","); 

這裏sarray [0]會返回ArrayIndexOutOfBoundsException異常。

1

這兒有你的一套測試案例,證明上述:

public class Test { 
    public static void main(String[] args){ 
     test("x,y"); 
     test(",y"); 
     test(""); 
     test(","); 
    } 

    private static void test(String x){ 
     System.out.println("testing split on value ["+x+"]"); 
     String y = x.split(",")[0]; 
     if(null == y){ 
      System.out.println("x returned a null value for first array element"); 
     } else if(y.length() < 1) { 
      System.out.println("x returned an empty string for first array element"); 
     } else { 
      System.out.println("x returned a value for first array element"); 
     } 
    } 
} 

運行時,這是你會得到什麼:

$ javac Test.java && java Test 
testing split on value [x,y] 
x returned a value for first array element 
testing split on value [,y] 
x returned an empty string for first array element 
testing split on value [] 
x returned an empty string for first array element 
testing split on value [,] 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
     at Test.test(Test.java:11) 
     at Test.main(Test.java:6) 
+1

如果'y'不是'boolean',那麼在Java中不需要'if(null == y)'。只要簡單地使用'if(y == null)'就可以了。 – 2012-03-16 20:28:35