一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java中字符串轉整數及MyAtoi方法的實現

java中字符串轉整數及MyAtoi方法的實現

2020-10-05 14:04JAVA之家 Java教程

這篇文章主要介紹了java中字符串轉整數及MyAtoi方法的實現的相關資料,需要的朋友可以參考下

java中字符串轉整數及MyAtoi方法的實現

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

java中字符串轉整數及MyAtoi方法的實現

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

這里已知的特殊情況有:

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

先來幾組測試用例:

?
1
2
3
4
5
6
7
8
9
"  010"
"  +004500"
" -001+2a42"
"  +0 123"
"-2147483648"
"2147483648"
"  - 321"
"   -11919730356x"
"9223372036854775809"

以上的測試用例對應的正確輸出如下:

?
1
2
3
4
5
6
7
8
9
10
4500
-1
0
-2147483648
2147483647
0
-2147483648
2147483647

Java實現代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public static int myAtoi(String str) {
    if(str==null||str.length()==0)
      return 0;
    char[] array = str.toCharArray();
    long result = 0; // 要返回的結果result
    int count = 0; // 記錄‘+'或者‘-'出現的次數
    int num = 0// 判斷空格出現的位置
    int flag = 1; // 正數還是負數
    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循環遍歷數組中,判斷某個char是否是數字,可以使用Character.isDigit(c)方法,計算result時,可以使用Character.getNumericValue(c)方法來得到某個char類型的數值,總之就是可以很方便的使用Character里邊的靜態方法。

重寫的for循環如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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);
         
      }
    }

        當面試時被問到這個題,我們可以不慌不亂的和面試官親切交談,制定該函數的一些規則,即如何處理異常輸入等,之后,再遍歷數組,根據需求進行相應的異常處理哦~

       感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/qq_25827845/article/details/72353770

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女一线天 | 色综久久天天综合绕视看 | 操到翻白眼 | 亚洲第一在线播放 | 国产麻豆流白浆在线观看 | 亚洲精品网址 | 精品一区在线 | 国产在线观看色 | 日本国产在线视频 | 亚洲欧美日韩另类在线一 | 日本一道本中文字幕 | 久久免费黄色 | 欧美一区高清 | 免费黄色网站视频 | julia ann一hd| 日韩国产欧美精品综合二区 | www.精品视频 | 99re热这里只有精品 | 免费观看俄罗斯特黄特色 | 男生操女生漫画 | 男女激情视频1000辣妞范 | 我和岳的性事小说 | 国内精品视频一区二区三区 | 亚洲熟区 | 国产日韩视频一区 | 99热精品在线观看 | 日韩性事| 好姑娘在线观看完整版免费 | 九色PORNY真实丨国产大胸 | 国产91精品区 | 国产精品久久久久久久久 | hd性欧美俱乐部中文 | 国产综合色在线视频区色吧图片 | 日本在线播放视频 | 99精彩免费观看 | 波多野结衣中文字幕 | 91会员| 精品日韩一区 | 国产成年人| 互换身体全集免费观看 | 亚洲AV 中文字幕 国产 欧美 |