2015-12-14 302 views
-5

我需要從預設字符串中提取字符。我知道方法string.charAt(),我使用它,但它使我的程序崩潰。我用的背景是這樣的:從字符串中提取字符

private String values = "ABCDEFG";  

//Converts a 10 base number to a q base 
private String t2q(String number, String base) { 

    String a = Double.toString((int)(Double.parseDouble(number)/Double.parseDouble(base))); 
    String b = Double.toString((int)(Double.parseDouble(number) % Double.parseDouble(base))); 
    StringBuilder converted = new StringBuilder(a + b); 
    if (!check_base(converted.toString(), base)) { 
     return t2q(a, base) + values.charAt(Integer.parseInt(b)); 
    } 
    char ab = values.charAt(Integer.parseInt(a)); 
    char ba = values.charAt(Integer.parseInt(b)); 
    return "" + ab + ba; 
} 

在開始的時候我在想,我的程序崩潰,因爲a處於Double格式如1.0所以我用一個函數,在1轉換1.0但沒有,它仍然崩潰。此外,我嘗試Character而不是char但它沒有區別。 對於示例number = "11011"base = 16,示例錯誤爲「java.lang.NumberFormatException:Invalid int:」1.0「」,因此基於16110111B

+3

什麼是異常「崩潰」?零分?空指針? – Jan

+0

你得到的例外是什麼? –

+0

此功能用於轉換基本應用程序。所以當程序達到'char ab = values.charAt(Integer.parseInt(a));'指令時,我立即得到「不幸的是,基本計算器已經停止」 –

回答

0

你不能使用Integer.parseInt()來解析表示Double的String。

這是行不通的:

Integer.parseInt("3.0"); 

這將工作:

Integer.parseInt("3"); 

使用這個代替:

new Double("3.0").intValue() 

但是考慮以下行爲:

new Double("2.5").intValue()將返回2.

+0

看到我編輯的答案。不客氣 – ProgWulf

+0

@ProgWulf好的,我有一個問題。我看到,在做這個方法後'char ab = values.charAt(new Double(a).intValue());對於'a'是'1.0','ab'將會是'''49','49'是什麼? –

+0

This char ab = values.charAt(new Double(a).intValue());按照預期, 僅在我的情況下返回1。 – ProgWulf