【题目】
给定一个字符串str,如果str符合日常书写的整数形式,并且属于32位整数的范围,输出str所代表的整数值,否则输出无效。
【示例】
str="" : Invalid
str=“123” : 输出123
str=“012” : Invalid(不合书写习惯)
str=“123a” : Invalid
str=“2147483648” : Invalid(溢出)
【解答】
一、首先检查是有效的整数形式
1.如果str为空串,返回false。
2.如果str以’0’开头,但是str的长度大于1,如,str=="012",返回false。
3.如果str以’0’开头,但是str的长度为1,即str=="-",返回false。如果str的长度大于1,但是’1’的后面紧跟着“0”,如,str=="-0"或"-012",返回false。
4.如果str不以’-‘开头,也不以数字字符开头,例如,str=="a12",返回false。
5.如果经过步骤1~步骤4都没有返回,接下来检查str[1…N-1]是否都是数字字符,如果有一个不是数字字符,则返回false。
6.如果经过步骤5没有返回,说明str符合日常书写,检查是否有溢出。如果开头不为’-’,说明str所代表的整数为正数,此时如果str比"2147483647"按字典排序要大,则有溢出,返回false;同理如果str所代表的整数为负数,且str比"-2147483647"按字典排序大,则有溢出,返回false
7.经过步骤1~步骤6都没有返回,返回true
public static boolean isValid(String str) {
if (str == null || str.equals(""))
return false;
if (str.charAt(0) == '0' && str.length() > 1)
return false;
if (str.charAt