Solution 20: 字符串转整数问题
问题描述
输入一个表示整数的字符串,把该字符串转成整数输出。
解决思路
考虑如下情况:
(1) 符号位;
(2) 是否溢出?溢出后的处理;
(3) 对于不合法的输入的处理。
程序
1. 假设输入合法
public class Atoi { public int transToInt(String s) { if (s == null || s.length() == 0) { return 0; } boolean pos = true; int i = 0; char bc = s.charAt(0); if (bc == '+' || bc == '-') { ++i; pos = bc == '-' ? false : true; } s = s.substring(i); // remove begin sign int sum = 0; int base = 10; for (i = 0; i < s.length(); i++) { sum = sum * base + (s.charAt(i) - '0'); } return pos ? sum : -sum; } }
2. 假设输入不一定合法
public int transToIntCheckIllegal(String s) throws Exception { if (s == null || s.length() == 0) { return 0; } boolean pos = true; int i = 0; char bc = s.charAt(0); if (bc == '+' || bc == '-') { ++i; pos = bc == '-' ? false : true; } s = s.substring(i); // remove begin sign long sum = 0; int base = 10; for (i = 0; i < s.length(); i++) { char c = s.charAt(i); if (!(c >= '0' && c <= '9')) { throw new Exception("Error: Illegal input!"); } sum = sum * base + (c - '0'); } if (pos && sum >= Integer.MAX_VALUE) { return Integer.MAX_VALUE; } if (!pos && -sum <= Integer.MIN_VALUE) { return Integer.MIN_VALUE; } return (int) (pos ? sum : -sum); }