2014-10-26 78 views
0

我想分裂一個由10個數字和(可能)字母組成的字符串並將它們放入數組中。我知道最好的方法是使用Java提供的.split()函數。我通常沒有問題。但是,我正在創建一個程序中遇到麻煩。如下面的代碼所示,我試圖在每個字符處拆分字符串。因此數組的長度應該是10.但是,.split(「」)函數會將字符串的開頭計數爲空格。這會導致程序的其餘部分出現問題,因爲該數組的索引中沒有元素。我怎樣才能阻止這種情況發生?。在Java中做一些奇怪的事情。()()()()

String input = 123456789x; 
String[] inputArr = input.split(""); 
System.out.println("Length: " + inputArr.length); 
for(int i=0;i<inputArr.length;i++){ 
    System.out.println(inputArr[i]); 
} 

此代碼將產生以下結果:(。空白指數實際上不輸出,它的存在,所以你可以看到它本來是一個空格)

Length: 11 

1 

2 

3 

4 

5 

6 

7 

8 

9 

x 
+1

String input = 123456789x;無效 – 2014-10-26 17:44:26

回答

2

結果開始處的空字符串是正確的(不幸的是)行爲,因爲每個字符串在它之前和之後都有空字符串d通過使用split(""),您決定拆分空字符串。換句話說

"foo" 

將在標有|

"|f|o|o|" 

地方,這將在第一生成陣列

["", "f", "o", "o", ""] 

但由於split默認還去除後返回空字符串被分割沒有最後一個空字符串的數組,但留下前面的一個

["", "f", "o", "o"] 

This behaviour was improved in Java 8所以"foo".split("")回報["f", "o", "o"],但如果你想在你需要明確地說,你想在每一個空字符串分割除了具有後開始串的一個預先的Java 8版本相同的結果/在它之前。要做到這一點,您可以使用環視像

yourString.split("(?!^)"); 

其他替代方案是不是使用char[]陣列將從字符串的字符舉行陣列String[]。要獲得這樣的數組,您可以簡單地調用:

char[] letters = yourString.toCharArray(); 
+0

非常感謝!你的代碼的最後一行爲我解決了! – George 2014-10-26 17:48:42

0
String[] inputArr = input.split("(?!^)");