2011-11-07 27 views
5

我知道,一個解決方案要做到這一點是:的atoi在Java中使用的charAt

String tmp = "12345"; 
     int result = 0; 
     for (int i =0; i < tmp.length(); i++){ 
      char digit = (char)(tmp.charAt(i) - '0'); 
      result += (digit * Math.pow(10, (tmp.length() - i - 1))); 

     } 

     System.out.println(result); 

我不明白的是爲什麼:

char digit = (char)(tmp.charAt(i) - '0'); 

這怎麼能轉換成數字?

+0

你只是想將一個字符串轉換爲int? – PTBG

+0

是的,我是..,我必須寫我自己的功能,類似於在C – xonegirlz

+0

這是作業嗎?如果沒有,只需使用'Integer.valueOf(「12345」)'。如果是這樣,請標記爲。 –

回答

12

char digit =(char)(tmp.charAt(i) - '0');

ascii table,從'0''9'字符是連續的。因此,如果您知道tmp.charAt(i)將返回09之間的字符,則子作品0將返回從零開始的偏移量,即該字符表示的數字。

0

的Java有一個內置的功能,這是否......

String s = "12345"; 
Integer result = Integer.parseInt(s); 
2

試試這個:

int number = Integer.parseInt("12345") 
// or 
Integer number = Integer.valueOf("12345") 

atoi可能是開發商有點謎。 Java更喜歡更易讀的名稱

7

char是一種整數類型,它將我們的字母映射爲計算機可以理解的數字(請參閱ascii chart)。一個字符串只是一個字符數組。由於數字在ascii表示中是連續的,所以'1' - '0' = 49 - 48 = 1,'2' - '0' = 50 - 48 = 2

8

使用Math.pow是非常昂貴的,你最好使用Integer.parseInt。

您不必使用Math.pow。如果您的號碼始終是積極的,你可以如果使用的Integer.parseInt你必須趕上例外,因爲 的Integer.parseInt(「82.23」)或的Integer.parseInt(「ABC」)將推出例外不

int result = 0; 
for (int i = 0; i < tmp.length(); i++) 
    result = result * 10 + tmp.charAt(i) - '0'; 
0

如果你想允許像

 atoi ("82.23") // => 82 
    atoi ("AB123") // => 0 

這是有意義的事情,那麼你可以使用

 public static int atoi (String sInt) 
    { 
     return (int) (atof (sInt)); 
    } 

    public static long atol (String sLong) 
    { 
     return (long) (atof (sLong)); 
    } 

    public static double atof (String sDob) 
    { 
     double reto = 0.; 

     try { 
      reto = Double.parseDouble(sDob); 
     } 
     catch (Exception e) {} 

     return reto; 
    } 
0

我重複一下湯姆說。

如果你對上面的實現感到困惑,那麼你可以參考下面的更簡單的實現。

private static int getDecValue(char hex) { 
    int dec = 0; 
    switch (hex) { 
    case '0': 
     dec = 0; 
     break; 
    case '1': 
     dec = 1; 
     break; 
    case '2': 
     dec = 2; 
     break; 
    case '3': 
     dec = 3; 
     break; 
    case '4': 
     dec = 4; 
     break; 
    case '5': 
     dec = 5; 
     break; 
    case '6': 
     dec = 6; 
     break; 
    case '7': 
     dec = 7; 
     break; 
    case '8': 
     dec = 8; 
     break; 
    case '9': 
     dec = 9; 
     break; 
    default: 
     // do nothing 
    } 
    return dec; 
} 

public static int atoi(String ascii) throws Exception { 
    int integer = 0; 
    for (int index = 0; index < ascii.length(); index++) { 
     if (ascii.charAt(index) >= '0' && ascii.charAt(index) <= '9') { 
      integer = (integer * 10) + getDecValue(ascii.charAt(index)); 
     } else { 
      throw new Exception("Is not an Integer : " + ascii.charAt(index)); 
     } 
    } 
    return integer; 
} 
0

如果編程在Java中,請使用此,

int atoi(String str) 
{ 
    try{ 
     return Integer.parseInt(str); 
    }catch(NumberFormatException ex){ 
     return -1; 
    } 
} 
+1

雖然這是正確的,但是 - imho - 回答這個問題,它可以從更多的上下文信息中受益,比如'parseInt()'是什麼,它做了什麼,以及在哪裏可以找到它的文檔。 – Clijsters

+0

當然。靜態方法'parseInt()'驗證字符串中的字符是否爲小數,除了第一個字符(可能是負號)。 [鏈接] https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String) –

+0

請對您的問題使用編輯功能。請參閱幫助中心的[我如何寫出一個好答案](https://stackoverflow.com/help/how-to-answer)。 – Clijsters