激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - java中字符串轉(zhuǎn)整數(shù)及MyAtoi方法的實(shí)現(xiàn)

java中字符串轉(zhuǎn)整數(shù)及MyAtoi方法的實(shí)現(xiàn)

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

這篇文章主要介紹了java中字符串轉(zhuǎn)整數(shù)及MyAtoi方法的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下

java中字符串轉(zhuǎn)整數(shù)及MyAtoi方法的實(shí)現(xiàn)

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

java中字符串轉(zhuǎn)整數(shù)及MyAtoi方法的實(shí)現(xiàn)

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

這里已知的特殊情況有:

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

先來幾組測試用例:

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

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

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

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

?
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; // 要返回的結(jié)果result
    int count = 0; // 記錄‘+'或者‘-'出現(xiàn)的次數(shù)
    int num = 0// 判斷空格出現(xiàn)的位置
    int flag = 1; // 正數(shù)還是負(fù)數(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ù)組中,判斷某個(gè)char是否是數(shù)字,可以使用Character.isDigit(c)方法,計(jì)算result時(shí),可以使用Character.getNumericValue(c)方法來得到某個(gè)char類型的數(shù)值,總之就是可以很方便的使用Character里邊的靜態(tài)方法。

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

?
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);
         
      }
    }

        當(dāng)面試時(shí)被問到這個(gè)題,我們可以不慌不亂的和面試官親切交談,制定該函數(shù)的一些規(guī)則,即如何處理異常輸入等,之后,再遍歷數(shù)組,根據(jù)需求進(jìn)行相應(yīng)的異常處理哦~

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品亚洲欧美一级在线 | 19禁国产精品福利视频 | av免费av | 久久久久久久网站 | 永久免费av片在线观看全网站 | 精品一区二区电影 | 黄色影院av| 成年免费网站 | 91看片在线播放 | 舌头伸进添的我好爽高潮网站 | 成人久久久久久久久 | 久久影院yy6080| 精品欧美一区二区精品久久 | 国产一区免费 | 成人免费一区 | 双性帝王调教跪撅打屁股 | 免费看黄色一级大片 | 国产精品成人久久 | 91精品国产91久久久久久吃药 | 欧美激情区 | 亚洲一区二区国产 | 免费毛片观看 | 奶子吧naiziba.cc免费午夜片在线观看 | 国产一级毛片网站 | 一级片在线 | 国产大片全部免费看 | 密室逃脱第一季免费观看完整在线 | 麻豆视频在线观看免费网站 | 黑人一级片 | 九九热九九热 | 依依成人综合 | 国产精品二区高清在线 | 免费国产一区二区视频 | 污视频在线免费播放 | 成人高清在线 | 黄色一级电影网 | 成人免费午夜视频 | 久久久久久久久国产精品 | 亚洲一区第一页 | 久久影城 | 在线成人免费av |