-
题目描述:将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。
-
输入描述:
输入一个字符串,包括数字字母符号,可以为空
-
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
-
示例:
输入: +2147483647 1a33 输出: 2147483647 0
-
-
代码
package _06.把字符串转换成整数; /** * 题目描述:将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能, * 但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。 * * @author Administrator * */ public class StrToInt { public static void main(String[] args) { int strToInt = strToInt("+2147483648"); System.out.println(strToInt); } public static int strToInt(String str) { String regex = "([-\\+]{1}\\d{1,10})|(\\d{0,10})"; if(!str.matches(regex)){ return 0; } // 最后结果 int result = 0; // 符号:默认为+号 boolean negative = false;// +号 String limit =Integer.toString(Integer.MIN_VALUE).substring(1); int i = 0; if (str.length() > 0) { //1. 判断符号 if (str.charAt(0) < '0')// +或者-; { if (str.charAt(0) == '-')// - { negative = true; } else if (str.charAt(0) != '+') {// 如果不为-号的就一定为+,否则格式错误 return 0; } i++;//在有符号的时候加1到数值 } //2.判断数值是否溢出 String strResult = str.substring(i); //负数 if(negative){ if(strResult.compareTo(limit) > 0){ return 0; } } //正数 if(!negative){ if(strResult.compareTo(limit) >= 0){ return 0; } } //3.计算数值 while(i<str.length()){ result = result*10 + (str.charAt(i++)-48); } return negative?-result:result; } else {// 空串 return 0; } } }
-
第二次改进代码
/** * 1.先简单的判断输入参数 * 2.获取字符串数值的符号(判断第一个符号的格式) * 3.循环:判断符号的格式、如正确则计算、判断是否溢出 * @param str * @return */ //标识输入的字符串格式是否有效 public static boolean isValid = false; public static int strToInt1(String str) { //1.先简单的判断输入参数 if(str == null || str.trim().equals("")) return 0; //默认为加号 boolean negative = false; //结果:可以定义为long型的变量,判断溢出的时候和整型的最大、最小值比较 int result = 0; //遍历str字符串 int index = 0; //2.获取字符串数值的符号(判断第一个符号的格式) //如果第一个符号是小于'0'的,那么符号要么为 +,要么为-;如果大于'0',则表示数值为正数 if(str.charAt(0) < '0'){ if(str.charAt(0) == '-'){ negative = true; } else if(str.charAt(0) != '+'){ return 0; } index++;//有显示的符号时 加1 } //3.循环:判断符号的格式、如正确则计算、判断是否溢出 while(index < str.length()){ //判断符号的格式 if(str.charAt(index) >= '0' && str.charAt(index) <= '9'){ //符号格式正确,累加/减 result = (negative == false) ? result*10 + (str.charAt(index)-'0') : result*10 - (str.charAt(index)-'0'); //判断结果是否溢出:正数溢出:符号变为负号(<0);负数溢出,符号变为正号(>0) //正数 if(!negative && result < 0){ isValid = false; return 0; } //负数 if(negative && result > 0){ isValid = false; return 0; } isValid = true; index++; } else{ isValid = false; return 0; } } return result; }
剑指offer-6.把字符串转换成整数(318)
最新推荐文章于 2022-02-24 17:30:18 发布