手写parseInt的实现:要求简单一些,把字符串型的数字转化为真正的数字即可(除Number之外)
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(parseInt("-343"));
System.out.println(Integer.parseInt("-343"));
}
public static int parseInt(String str) throws NumberFormatException{
int res = 0;
Pattern p = Pattern.compile("^-?\d+$"); //正则表达式
Matcher m = p.matcher(str);
if(!m.matches()){
throw new NumberFormatException();
}
for(int i = str.length() -1 ,j = 0; i > -1; i --, j ++){
char v = str.charAt(i);
if(i == 0 && v == '-'){
res = -res;
break;
}
res += (v - 48) * Math.pow(10, j);
}
return res;
}
虽然之前没想过这玩意,也没去看源码。我大概是这样想的,可能不够成熟,比如没有考虑到使用正则什么的之类来进行判定,这个后面再考虑:
首先,明显你这个是转换为int类型,并且也是一个方法,那么结果就是这个方法必然有个参数,并且类型是字符串,然后还必然有个返回值,类
型是的int的。那么一个基本方法就是这样了:
1.
public int myParseInt(String str){
int num = 0;------先写上,这里也必须赋值,不然报错,毕竟是局部变量
return num;
}
2.那么你给的字符串先假设就是纯数字整数的比如这个字符串“123456”,那么接下来我就需要先处理一下,把每一个字符串里的字符单独拆分下来,
使用字符串的sbustring()方法来拆分,然后每一个字符和0-9的单个字符串进行比较,如果不是数字就直接抛出错误,这样可以直接结束方法。
3.使用switch比较字符串是0-9中的哪一个,在每个case语句里面就直接用对应的整数来操作。如获得的是"1"
swtich("1"){
case "1":
num += 1
break;
}
这样做然后给0-9的都写上。
4.然后还要判定数字所在的位数,是个位还是十位百位,来进行* 10 (个位不管,十位开始*10 百位*100)然后进行累加。
5.返回num就完成了。当然想要完善里面还要加上许多判定抛异常,哪个就可以参考下源码的了
package algorithm;
/**
4楼的方法是可以的,在esle{try{
throw new NumberFormatException();
}catch(NumberFormatException e){
system.err.println("此字符串转换不了整数"+e);
}
}