溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在java項目中如何實現(xiàn)將字符串轉(zhuǎn)換為整數(shù)

發(fā)布時間:2020-11-19 16:18:49 來源:億速云 閱讀:256 作者:Leah 欄目:編程語言

這篇文章給大家介紹在java項目中如何實現(xiàn)將字符串轉(zhuǎn)換為整數(shù),內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

java中字符串轉(zhuǎn)整數(shù)

       該題雖然和我們正常使用的字符串轉(zhuǎn)整數(shù)的API中函數(shù)不一致,但是通過增加了很多額外的邊界或者異常處理,可以鍛煉算法思維的敏銳性和處理邊界異常等問題的能力。

在java項目中如何實現(xiàn)將字符串轉(zhuǎn)換為整數(shù)

思路:字符串題一般考查的都是邊界條件、特殊情況的處理。所以遇到此題一定要問清楚各種條件下的輸入輸出應(yīng)該是什么樣的。

這里已知的特殊情況有:

  • 能夠排除首部的空格,從第一個非空字符開始計算
  • 允許數(shù)字以正負號(+-)開頭
  • 遇到非法字符便停止轉(zhuǎn)換,返回當前已經(jīng)轉(zhuǎn)換的值,如果開頭就是非法字符則返回0
  • 在轉(zhuǎn)換結(jié)果溢出時返回特定值,這里是最大/最小整數(shù)
     

先來幾組測試用例:

"  010"
"  +004500"
" -001+2a42"
"  +0 123"
"-2147483648"
"2147483648"
"  - 321"
"   -11919730356x"
"9223372036854775809"

以上的測試用例對應(yīng)的正確輸出如下:

10
4500
-1
0
-2147483648
2147483647
0
-2147483648
2147483647

Java實現(xiàn)代碼如下:

public static int myAtoi(String str) { 
    if(str==null||str.length()==0) 
      return 0; 
    char[] array = str.toCharArray(); 
    long result = 0; // 要返回的結(jié)果result 
    int count = 0; // 記錄‘+'或者‘-'出現(xiàn)的次數(shù) 
    int num = 0;  // 判斷空格出現(xiàn)的位置 
    int flag = 1; // 正數(shù)還是負數(shù) 
    for (int i = 0; i < array.length; i++) { 
      Character c = array[i]; 
      if(c>='0'&&c<='9'){ 
        result = result*10+c-'0'; 
        // 判斷是否溢出 
        if(flag==1&&result>Integer.MAX_VALUE){ 
          return Integer.MAX_VALUE; 
        }else if(flag==-1&&-result<Integer.MIN_VALUE) 
          return Integer.MIN_VALUE; 
        num++; 
      }else if(c==' '&&num==0&&count==0) 
        continue; 
      else if(c=='+'&&count==0){ 
        count = 1; 
      } 
      else if(c=='-'&&count==0){ 
        flag = -1; 
        count = 1; 
      } 
      else{ 
        return (int) (flag*result); 
         
      } 
    } 
    return (int) (flag*result); 
  } 

在上邊的代碼中,for循環(huán)遍歷數(shù)組中,判斷某個char是否是數(shù)字,可以使用Character.isDigit(c)方法,計算result時,可以使用Character.getNumericValue(c)方法來得到某個char類型的數(shù)值,總之就是可以很方便的使用Character里邊的靜態(tài)方法。

重寫的for循環(huán)如下:

for (int i = 0; i < array.length; i++) { 
      Character c = array[i]; 
      if(Character.isDigit(c)){ 
        result = result*10+Character.getNumericValue(c); 
        if(flag==1&&result>Integer.MAX_VALUE){ 
          return Integer.MAX_VALUE; 
        }else if(flag==-1&&-result<Integer.MIN_VALUE) 
          return Integer.MIN_VALUE; 
        num++; 
      }else if(Character.isSpaceChar(c)&&num==0&&count==0) 
        continue; 
      else if(c=='+'&&count==0){ 
        count = 1; 
      } 
      else if(c=='-'&&count==0){ 
        flag = -1; 
        count = 1; 
      } 
      else{ 
        return (int) (flag*result); 
         
      } 
    } 

關(guān)于在java項目中如何實現(xiàn)將字符串轉(zhuǎn)換為整數(shù)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI