2015-04-12 51 views
2

所以我在Java和StackOverflow上(這就是他們都這樣說)很新的,我停留在給定的問題:給定一個字符串如何將其轉換爲數組:Java的

我的方法被賦予了字符串例如:"[ 25 , 25 , 125 , 125]"。現在該方法應該返回一個由String提供的整數表示形式,即:它應該返回 [25,25,125,125]

這是我的方法的一部分。注:輸入提供

if(input.charAt(index) == '['){ 
    index++; 
    int start = index; 

    while(index <= input.length() && input.charAt(index) != ']'){ 
     index++; 
    } 

    String[] arrayStr = input.substring(start, index).split(","); 
    int[] arrayInt = new int[4]; 
    for (int i = 0; i < arrayStr.length; i++){ 
     arrayInt[i] = Integer.parseInt(arrayStr[i]); 
    } 
    return arrayInt; 

字符串我的代碼工作,如果輸入的是:"[25,25,125,125]"(如果有數字之間沒有空格)。 但是,如果數字之間有空格,那麼我的代碼不起作用,我明白爲什麼,但我正在努力尋找解決此問題的方法。任何幫助將不勝感激。

+2

閱讀的javadoc的字符串。它有像你應該使用trim(),indexOf()和lastIndexOf()等方法。不要以爲你的數組有4個元素。使用'arrayStr.length'。 –

+0

你的字符串是否只能包含'[數字]'或者它也可以是'某些字[數字,xxx]其他字'的形式? – Pshemo

+0

爲什麼不在處理之前簡單地刪除所有空格? 'String s = input.replaceAll(「\\ s」,「」);' –

回答

3

空間將失敗,Integer.parseInt(arrayStr[i])(如字符串「25」不是一個有效的數字,因爲它包含一個空格。(parseInt將扔在這種情況下的例外)。

但是您可以通過調整迅速解決它您的數組元素:

Integer.parseInt(arrayStr[i].trim()) 

trim()返回字符串的副本,沒有前導/尾隨空白

+0

奇妙地工作。感謝您的直接幫助。 – HPSS

2

您可以將字符串與空替代空間

input=input.replace(" ","") 
2

可以

  1. 去除,[]和所有的空格
  2. 分裂讓所有令牌
  3. 迭代所有令牌

    • 解析串號int
    • 加解析INT導致陣列

所以,你的代碼可以像

String data = "[ 25 , 25 , 125 , 125]"; 
String[] tokens = data.replaceAll("\\[|\\]|\\s", "").split(","); 
int[] array = new int[tokens.length]; 
for (int i=0; i<tokens.length; i++){ 
    array[i]=Integer.parseInt(tokens[i]); 
} 

或者,如果你有Java的8,你可以使用流像

int[] array = Stream.of(data.replaceAll("\\[|\\]|\\s", "").split(",")) 
     .mapToInt(number -> Integer.parseInt(number)) 
     .toArray(); 
相關問題