题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647
0
解题思路
(1先用一个Map<String, Integer>将0-9的数字封装起来,如以“0”为key,以0为value;
(2)将str转化为char[],再遍历该数组,如果char[]中存在一个元素在map中get不到,则表明该str不是一个合法的数值
(3判断str是否是以+或-开头的,如果是则遍历数组时就不是从第0位开始的,而是从第1位开始的,如果是以-开头,后面还要以负数的形式返回
(4)为了避免溢出,最好先用long,最后再转回int
代码如下
public int StrToInt(String str) { if (str.equals("")) { return 0; } Map<String, Integer> map=new HashMap<String, Integer>(); for (int i = 0; i < 10; i++) { map.put(String.valueOf(i), i); } char[] array=str.toCharArray(); boolean flag=true; long result=0; int i=0; if (String.valueOf(array[0]).equals("+")||String.valueOf(array[0]).equals("-")) i=1; for (; i < array.length; i++) { if (map.get(String.valueOf(array[i]))==null) { flag=false; break; }else { result+=map.get(String.valueOf(array[i]))*Math.pow(10, str.length()-1-i); } } if (!flag) { return 0; }else { if (String.valueOf(array[0]).equals("-")) { return (int)(0-result); } return (int)result; } } public static void main(String[] args) { StrToInt strToInt=new StrToInt(); System.out.println(strToInt.StrToInt("36")); }
原文地址:https://www.cnblogs.com/Transkai/p/11392777.html
时间: 2024-10-09 04:28:32