2012-12-07 78 views
3

我有一個字符串,大約有150個數字,像這樣String num =「64513246563 ........」;Java字符串到Int

我想添加此字符串的每個數字。所以我的想法是將它分成一系列整數並從那裏添加它們。我首先將它分成一個String數組,然後嘗試將它轉換爲一個Int數組。我收到一個未知的源錯誤。下面是代碼:

String[] strArray = num.split(""); 
int[] intArray = new int[strArray.length]; 
     for(int i = 0; i < strArray.length; i++) { 
      intArray[i] = Integer.parseInt(strArray[i]); 
      } 

這裏是錯誤:

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 

有人能看到我在做什麼錯誤的或者是有這樣做的更有效的方法?

////////////////////////////////

感謝您的幫助大家,似乎分裂使用.split(「」)的字符串創建索引0這是我的主要問題,但還有很多關於如何更有效地解決問題有用的線索的一個空字符串:)謝謝大家的輸入

+0

在循環的每次迭代中打印strArray [i]並查看它打印的內容 – Osiris

回答

5
int sum = 0; 
for (int i = 0; i < string.length(); i++) { 
    sum += Character.getNumericValue(string.charAt(i)); 
} 
+1

編譯錯誤。 :P –

+0

您需要'num.length()'而不是'num.length'。 –

+0

哦對..錯過了:) – user219882

3
java.lang.NumberFormatException: For input string: "" 

異常消息清楚地表明輸入爲空字符串。

處理的一種方法是,在解析之前檢查空的String檢查。

for(int i = 0; i < strArray.length(); i++) { 
      if(strArray[i] != null && !"".equals(strArray[i]) 
       { 
       int q = Integer.parseInt(strArray[i]); 
       } 
      } 

注意:如果輸入不是有效的int,但是在空字符串(或)爲空的情況下,將仍然失敗。

另一種方式來處理,這將是獲得chartAt(i),而不是使用split("")

+0

非常感謝您的幫助。我不確定字符串如何可以是空的,但這當然可以解決問題。非常感謝。 – shanahobo86

+0

@ shanahobo86你可以從1開始我不是零檢查我的答案。 – Suranga

+0

@ shanahobo86請注意,您的陣列中的第0個元素將使用此方法。 –

0
for(int i=0; i<yourString.length; i++) { 
    yourIntegers[i] = Integer.parseInt(yourString.charAt(i).ToString()); 
} 
2
String num="12234"; 
     String[] numarr = num.split(""); 
     System.out.println(numarr.length); 

當你""分割字符串會有零指數在空字符串。 因此,你的結果數組將是:

{"", "1", "2", "2", "3", "4"} 

測試,上述返回長度6.從而Integer.parseInt("")導致NumberFormatException的

測試:

String num="12234"; 
     String[] numarr = num.split(""); 
     for(String s: numarr){ 
      if(s.equals("")){ 
       System.out.println("empty string"); 
      } 
      else { 
       System.out.println(s); 
      } 

輸出:

empty string 
1 
2 
2 
3 
4 

因此,在指數的emptyString 0

所以,你必須檢查字符串爲空字符串解析之前:

String[] strArray = num.split(""); 
int[] intArray = new int[strArray.length]; 
     for(int i = 0; i < strArray.length; i++) { 
      if(!strArray[i].equals("")) 
      intArray[i] = Integer.parseInt(strArray[i]); 
      } 
+0

謝謝你的詳細解釋。我不會再犯同樣的錯誤:) +1 – shanahobo86

+0

@ shanahobo86歡迎您:) – PermGenError

8

由​​給出的第一個字符串是空的。

解決方案是簡單地在索引1開始迭代。

但是你做的是太貴了,你可以做

String num = "64513246563"; 
    for(int i = 0; i < num.length(); i++) { 
     int digit = num.charAt(i)-'0'; 
     ... // use the digit, perhaps adding it 
    } 
+2

'+ 1'表明爲什麼空字符串在那裏開始。 –

+0

的確,我不確定我是如何得到一個空字符串的。 +1並感謝您的解釋。 – shanahobo86

+0

@ shanahobo86如果這不僅僅是爲了學習,我強烈建議你不要構建你的中間數組和你解析的所有字符串。這真是浪費。 –

1
char[] charArray = num.toCharArray(); 

for(char c : charArray) { 
    int q = Integer.parseInt("" + c); 
} 
0

我會簡單地沿着串步驟,分析每一個數字:

int sum = 0; 
for (int i = 0; i < num.length(); ++i) { 
    sum += Integer.parseInt(num.substring(i, i + 1)); 
} 
0

由於從陣列啓動一個空字符串,你必須跳過第一個元素,因此在for循環中從1開始i

for(int i = 1; i < strArray.length; i++) 
+1

一個基本原理可以改善這個答案。 –

+0

@特德霍普是同意和完成 – Suranga