package TestProblem;
public class Test49 {
/**
* 题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能,
* 不能使用atoi或者其他类似的库函数。
*
* @param num
* @return
*/
//特殊字符输入分为:首字符为-+和0-9的数字
public static int stringToInt(String num){
if(num==null||num.length()<1){
throw new NumberFormatException(num);
}
//-或者+都必须是从第一个字符算起!
char first=num.charAt(0);
if(first=='-'){
return parseString(num,1,false);
}else if(first=='+'){
return parseString(num, 1, true);
}else if(first<='9'&&first>='0'){
return parseString(num, 0, true);
}else{
throw new NumberFormatException(num);
}
}
/**
* 判断字符是否是数字
*
* @param c 字符
* @return true是,false否
*/
private static boolean IsDigit(char c){
return c>='0'&&c<='9';
}
/**
* 对字符串进行解析
*
* @param num 数字串
* @param index 开始解析的索引
* @param positive 是正数还是负数
* @return 返回结果
*/
private static int parseString(String num,int index,boolean positive){
if(index>=num.length()){
throw new NumberFormatException(num);
}
int result;
long tmp=0;
while (index <num.length()&&IsDigit(num.charAt(index))) {
tmp=tmp*10+num.charAt(index)-'0';
//保证所求的的值在整数的范围内
if(tmp>0x8000_0000L){
throw new NumberFormatException(num);
}
index++;
}
if(positive){
//如果数字溢出
if(tmp>=0x8000_0000L){
throw new NumberFormatException(num);
}else{
result=(int)tmp;
}
}else{
if(tmp==0x8000_0000L){
result=0x8000_0000;
}else{
result=(int) -tmp;
}
}
return result;
}
public static void main(String[] args) {
//System.out.println(Integer.parseInt(Integer.MAX_VALUE + ""));
// System.out.println(Long.MAX_VALUE);
// System.out.println(stringToInt(""));
//System.out.println(stringToInt("123"));
// System.out.println(stringToInt("+123"));
// System.out.println(stringToInt("-123"));
System.out.println(stringToInt("1abc"));//含有字母的都是非法字符
// System.out.println(stringToInt("+2147483647"));
// System.out.println(stringToInt("-2147483647"));
// System.out.println(stringToInt("+2147483648"));
// System.out.println(stringToInt("-2147483648"));
// System.out.println(stringToInt("+2147483649"));
// System.out.println(stringToInt("-2147483649"));
// System.out.println(stringToInt("+"));
// System.out.println(stringToInt("-"));
}
}
实现一个函数stringToInt,实现把字符串转换成整数这个功能
最新推荐文章于 2022-08-08 19:39:14 发布