import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return int整型
*/
public int StrToInt (String s) {
if(s == null || s.length() == 0) {
return 0 ;
}
String temp = s.trim() ;
char[] arr = temp.toCharArray() ;
StringBuilder sb = new StringBuilder() ;
int opt = 0 ;//1负。0正
for(int i = 0 ; i < arr.length ; i ++) {
if(i == 0 && (arr[i] == '-' || arr[i] == '+')) {//处理符号
if(arr[i] == '-') {
opt = 1 ;
} else {
opt = 0 ;
}
continue ;
}
if(arr[i] >= '0' && arr[i] <= '9') {//拿到符号之后的连续数字
sb.append(arr[i]) ;
} else {
break ;
}
}
char arr1[] = sb.toString().toCharArray() ;//这些连续数字中可能含前导0
int index = 0 ;//有效数字开始的位置(除去前导零)
for( ; index < arr1.length ; index++) {
if(arr1[index] != '0') {
break ;
}
}
sb = new StringBuilder() ;
for(int i = index ;i < arr1.length ; i ++) {
sb.append(arr1[i]) ;
}
arr = sb.toString().toCharArray() ;//arr里面全是有效数字
if(arr.length == 0) {//没有有效数字
return 0 ;
}else{
return toint(opt,arr) ;//转换
}
}
public int toint(int opt , char[] arr) {//辅助函数,将数字串转换位数字
if(arr.length > 10) {//长度大于10直接返回最值
if(opt == 0) {
return Integer.MAX_VALUE ;
} else {
return Integer.MIN_VALUE ;
}
} else if(arr.length == 10) {//长度等于10,逐位比较,判断是否超过最值
char[] fu = ("2147483648").toCharArray() ;//最值数组
char[] zheng = ("2147483647").toCharArray() ;
if(opt == 0) {//正数
for(int i = 0 ; i < arr.length ; i ++) {
if(arr[i] > zheng[i]) {//超过最值
return Integer.MAX_VALUE ;
}
}
return legaltoInt(opt ,arr) ;
} else {//负数
for(int i = 0 ; i < arr.length ; i ++) {
if(arr[i] > fu[i]) {//超过最值
return Integer.MIN_VALUE ;
}
}
return legaltoInt(opt ,arr) ;
}
} else {
return legaltoInt(opt ,arr) ;
}
}
public int legaltoInt(int opt ,char[] arr) {//辅助函数,将不超过最值的数字串转化为数字
int res = 0 ;
int base = 1 ;
for(int i = arr.length-1 ; i >= 0 ; i --) {
res+=(arr[i]-48)*base ;
base*=10 ;
}
if(opt == 0) {//正数
return res ;
} else {//负数
return 0-res ;
}
}
}