題目描述
實現一個將字符串轉化為一個整數的函數
思考過程
- 先考慮都會有什么可能的輸入情況
1.1 合法輸入,如:“213”,“+1”,“0”,“-3”
1.2 非法輸入,如小數:“1.2”;分數:“3/2”;字符:“abc”,“a1”,“1a”;空字符:“ asdfa fasdfgdfg” - 所以應當先判斷輸入是否合法,非法則不執行轉換
- int:max=2147483647,min=-2147483648
字符串相關函數:
- length():字符串長度
- indexOf()、lastIndexOf():確定字符串位置
- equals():字符串比較
- charAt():得到指定位置的字符
- getChars():得到字符串的一部分字符串
- subString():提取字符串的另一種方法,它可以指定從何處開始提取字符串以及何處結束
- replace():將字符串中的一個字符替換為另一個字符
- concat():把兩個字符串合并為一個字符串
- toUpperCase()和toLowerCase():分別實現字符串大小寫的轉換
- trim():將字符串中開頭和結尾處的空格去掉(本題適用)
- valueOf():將任何類型的數據對象轉換為一個字符串
- append():在字符串后面追加
- insert():在字符串中間插入
- setCharAt():改變某個位置所在的字符
- 查看更多java字符串操作…
char和int的轉換:
- int 轉換成char:
int n = 1;
char ch = (char)(n + '0');
這樣打印出來ch的值為1;
不過需要注意(因為char只有一個字節),此處的n只能是0-9之間的字符
- char轉int:
char ch = '9';
int n = int(ch) - int('0');
此處ch也是‘0’至‘9’的數字字符
遇到的問題:
-
char轉換string?
答:""+char即可轉為string -
char轉換int?
答:見上面 -
如何匹配0-9數字?
答:可以使用正則表達式,設置模板進行匹配,如:
String reg="0|1|2|3|4|5|6|7|8|9";
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(str);
boolean result=m.find();
如果字符串不是合法int類型,應該return什么?
答:有多少是合法的就輸出多少合法的,盡可能的解析對于超出int上下限的數值如何處理?
答:截斷處理,即超出范圍的均輸出最大或者最小值如何獲得int的最大最小值?
答:Integer.MAX_VALUE和Integer.MIN_VALUE
提交狀態:
- Runtime Error
原因:沒有考慮到輸入字符串為空的情況
解決方法:
if(len==0){
return 0;
}
- Wrong Answer
原因:對于類似的不合法字符串,期待輸出是盡可能的解析,自己的理解不到位,對于不合法字符串都輸出了0
Input:" -0012a42"
Output:0
Expected:-12
解決方法:修改return,盡可能解析
- Wrong Answer
原因:int上下限沒有處理
Input:"2147483648"
Output:-2147483648
Expected:2147483647
解決方法:將result類型由int轉為long,并在return之前進行數值大小是否溢出的判斷
long result=0;
...
if(PandN==1 && result>2147483647){
return 2147483647;
}else if(PandN==(-1) && -1*result<-2147483648){
return -2147483648;
}else{
return PandN*(int)result;
}
- Wrong Answer
原因:上次考慮了int上下溢出的問題,但是沒有考慮long上下溢出的問題
Input:"9223372036854775809"
Output:1
Expected:2147483647
解決方法:將判斷尺寸語句內置在每次循環中,實時判定,只要超出int范圍,立即截斷輸出
- Accepted