【Java】 剑指offer(67) 把字符串转换成整数
生活随笔
收集整理的這篇文章主要介紹了
【Java】 剑指offer(67) 把字符串转换成整数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
本文參考自《劍指offer》一書,代碼采用Java語言。
更多:《劍指Offer》Java實現合集??
題目
請你寫一個函數StrToInt,實現把字符串轉換成整數這個功能。當然,不能使用atoi或者其他類似的庫函數。
思路
題目很簡單,主要就是實現對每個字符轉化為數字,并進行累加即可。但是有很多特殊情況都需要考慮進去,例如null、空字符串、帶有正負號、字符不是數字、溢出等等。
對于非法的特殊輸入,返回值為0,還要用一個全局變量進行標記。
寫代碼時一定要考慮清楚各種測試用例。
?
?測試用例
1.功能測試(正、負、零、帶有正負號的數字)
2.邊界值測試(最大正整數,最小負整數)
3.特殊測試(null,數空字符串,僅有正負號,非法字符)
Java代碼
今天腦子有點亂,代碼總感覺不是很簡潔,有點繁瑣,但功能是完善的。
附注:字符串如果僅有正負號這里認定為非法輸入
//題目:請你寫一個函數StrToInt,實現把字符串轉換成整數這個功能。當然,不 //能使用atoi或者其他類似的庫函數。public class StringToInt {static boolean isValid = false;public static int strToInt(String str) {if(str == null || str.length()<=0)return 0;char[] chars = str.toCharArray();long num=0; //先用long來存儲,以防止越界boolean minus=false;for(int i=0; i<chars.length; i++){if(i==0 && chars[i]=='-'){minus=true;}else if(i==0 && chars[i]=='+'){minus=false;}else{int a=(int) (chars[i]-'0');if(a<0 || a>9){isValid=false;return 0;}num= (minus==false) ? num*10+a : num*10-a;isValid=true; //不放在最后面是為了防止str=‘+’的情況被判斷為trueif((!minus && num>0x7FFFFFFF)||(minus && num<0x80000000)){isValid=false;return 0;}}}return (int)num;}//簡單測試下public static void main(String[] args) {System.out.println(strToInt("1948243")==1948243);System.out.println(isValid==true);System.out.println(strToInt("+1948243")==1948243);System.out.println(isValid==true);System.out.println(strToInt("-1948243")==-1948243);System.out.println(isValid==true);System.out.println(strToInt("-0")==0);System.out.println(isValid==true);System.out.println(strToInt("-194+8243")==0);System.out.println(isValid==false);System.out.println(strToInt("")==0);System.out.println(isValid==false);System.out.println(strToInt(null)==0);System.out.println(isValid==false);System.out.println(strToInt("999999999999999")==0);System.out.println(isValid==false);System.out.println(strToInt("+")==0);System.out.println(isValid==false);System.out.println(strToInt("2147483647")==2147483647); //0x7FFFFFFFSystem.out.println(isValid==true);System.out.println(strToInt("2147483648")==0);System.out.println(isValid==false);System.out.println(strToInt("-2147483648")==-2147483648); //0x80000000System.out.println(isValid==true);System.out.println(strToInt("-2147483649")==0);System.out.println(isValid==false);} }true true true true true true true true true true true true true true true true true true true true true true true true true true StringToInt
?
收獲
1.熟練掌握char類型轉化為int類型操作。
2.邊界值測試,記住int類型最大正整數為0x7FFFFFFF,最小負整數為0x80000000。
3.注意到了負號,也要注意到正號。
更多:《劍指Offer》Java實現合集??
?
轉載于:https://www.cnblogs.com/yongh/p/9973036.html
總結
以上是生活随笔為你收集整理的【Java】 剑指offer(67) 把字符串转换成整数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “华为杯”第17届中国研究生数学建模竞赛
- 下一篇: 伺服驱动器的 三环控制 电流环 速度环