给出了两种方法,一种是正常遍历,还有一种为正则表达式匹配。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.math.BigInteger;
class Solution {
public int myAtoi(String str) {
String pattern = “^\s*([±]?\d+)”;
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
if (!m.find( )) return 0;
BigInteger ans = new BigInteger(m.group(1));
if(ans.compareTo(new BigInteger(String.valueOf(Integer.MIN_VALUE)))<0){
return Integer.MIN_VALUE;
}
if(ans.compareTo(new BigInteger(String.valueOf(Integer.MAX_VALUE)))>0){
return Integer.MAX_VALUE;
}
return ans.intValue();
}
/*
public int myAtoi(String str) {
//str = "words and 987";
int n = str.length();
//System.out.println(n);
int w = 1;
int i = 0;
for(i=0;i<n;i++){
char a = str.charAt(i);
//System.out.println(a);
if( a <= '9' && a >= '0'){
break;
}else
if(a=='+'){
i++;
break;
}else
if(a=='-'){
i++;
w=0;
break;
}else
if(a==' '){
continue;
}else
return 0;
}
if(i==n){
//System.out.println("i==n");
return 0;
}
int num=0;
for(i=i;i<n;i++){
char a = str.charAt(i);
//System.out.println(a);
if( a <= '9' && a >= '0'){
int addnum = a - '0';
num *=10;
num+=addnum;
}else{
break;
}
}
if(w==0){
num = 0 - num;
}
return num;
}*/
}