2014-09-20 31 views
4

在我的程序中,我需要將字符串轉換爲Int。無法將字符串轉換爲Java中的int

String str = new String(request.getData()); 

    String [] setting = str.split(" ");   
    String bs = setting[1]; 

BS的值是1024,我使用System.out.println測試它,並且它在屏幕上顯示與「1024」。

但是當我使用

int blockSize = Integer.parseInt(bs); 

將異常點返回的Integer.parseInt行:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1024" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
    at java.lang.Integer.parseInt(Integer.java:458) 
    at java.lang.Integer.valueOf(Integer.java:554) 

有人可以幫助我解決這個問題?謝謝。

+0

確定BS包含1024個,因爲如果這樣,那麼你不應該得到任何問題。 – lxcky 2014-09-20 07:15:13

+1

@darknight,因爲他使用空格作爲分隔符,所以我不認爲這是一個過多的空格問題。 – lxcky 2014-09-20 07:17:17

+0

我認爲你的bs包含'字符串'值不是'整數',這就是爲什麼這個錯誤。確保'setting [postion]'是一個'integer'值。我的意思是像「somevalue」。 – Rustam 2014-09-20 07:22:05

回答

10

我懷疑你有串bs在一些隱蔽的Unicode字符,你可以刪除非數字字符用:

bs = bs.replaceAll("\\D", ""); 
int blockSize = Integer.parseInt(bs); 

上面的代碼也將字符串轉換"1a2"12,但不看起來你的情況。

+0

我試過bs.length(),返回值是1019 ...我用「bs = bs.replaceAll(」\\ D「,」「);」 ,問題解決了,謝謝。 – jacobbb 2014-09-20 12:42:07

+0

yeah..1019..idk爲什麼數組setting []是我從datagramSocket發送的,有沒有這樣做? – jacobbb 2014-09-20 12:51:05

0
while((!bs.matches("\\d+")) && (bs.length > 1)) 
    { 
     bs = bs.substring(1); 
    } 

    if (bs.matches("\\d+") 
    { 
     int blockSize = Integer.parseInt(bs); 
    } 
    else 
    { 
     int blockSize = -1; 
    } 
    /* !! Then, check for "-1" in your application of 
      block size #runtime_exception_prevention */ 

根據需要,這將繼續將無用的非數字位刪除到1,直到找到數字或者只有一個字符保留在字符串中。第二次檢查可防止發生異常並返回標記的值。檢查此標記的值將攔截運行時異常。 注:我在註釋塊中寫了這段代碼,請原諒任何小錯誤,我會很樂意糾正。

1

試試這個代碼:

String bs = setting[1].trim().toString();