07.把字符串转换成整数
目录介绍
- 01.题目要求
- 02.问题分析
- 03.实例代码
01.题目要求
- 问题如下所示:
- 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。
- 示例 :
public static void main(String[] args){ String str1 = "f210+211"; String str2 = "210211"; String str3 = "010211"; int a = StrToInt(str1); int b = StrToInt(str2); int c = StrToInt(str3); System.out.println("yc----a---" + a); System.out.println("yc----b---" + b); System.out.println("yc----c---" + c); } //打印日志 yc----a---0 yc----b----210211 yc----c----10211
02.问题分析
- 分析思路如下所示
- 首先判断字符串不为空,否则直接返回0;
- 然后将字符串转化为字符数组,获取第一个字符,如果是‘+’则是整数,如果是‘-’则是负数。
- 创建一个变量,用于保存结果。然后依次遍历字符数组。
- 如果某个字符不是数字,则直接返回0;
- 如果字符都是数字,则需要做运算res = res * 10 + temp;
03.实例代码
- 代码如下所示
public static int StrToInt(String str) { if (str==null || str.length() == 0){ return 0; } char[] chars = str.toCharArray(); // 判断是否存在符号位 int flag = 0; if (chars[0] == '+'){ flag = 1; } else if (chars[0] == '-'){ flag = 2; } int start = flag > 0 ? 1 : 0; int res = 0;// 保存结果 for (int i = start; i < chars.length; i++) { // 调用Character.isDigit(char)方法判断是否是数字,是返回True,否则False if (Character.isDigit(chars[i])) { int temp = chars[i] - '0'; res = res * 10 + temp; } else { return 0; } } return flag == 1 ? res : -res; }
04.改进一下
- 如果上面字符串中除了+,-符号以外的非数字字符,则直接剔除,然后打印数组,则如何操作
public static int toInt(String str) { if (str==null || str.length() == 0){ return 0; } char[] chars = str.toCharArray(); // 判断是否存在符号位 int flag = 0; if (chars[0] == '+'){ flag = 1; } else if (chars[0] == '-'){ flag = 2; } int start = flag > 0 ? 1 : 0; int res = 0;// 保存结果 for (int i = start; i < chars.length; i++) { // 调用Character.isDigit(char)方法判断是否是数字,是返回True,否则False if (Character.isDigit(chars[i])) { int temp = chars[i] - '0'; res = res * 10 + temp; } else { res = res; } } return flag == 1 ? res : -res; } //测试代码 String str3 = "010a2b11"; int c = toInt(str3); System.out.println("yc----c---" + c); //打印结果 yc----c----10211