字符串问题----将整数字符串转换成整数值
Posted demrystv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串问题----将整数字符串转换成整数值相关的知识,希望对你有一定的参考价值。
将整数字符串转换成整数值
给定一个字符串str,如果str符合日常书写的规范,并属于32位整数的范围,返回str所代表的整数值,否则返回0。如 023, A13, 2147483648,均返回0。
【解题思路】
定义四个变量,flag表示正负,res表示结果,minq表示最小值除以10的商,minr表示最小值除以10 的余数。因为最小值是 -2147483648,最大值是2147483647,负数有更大的范围,所以以负数的形式保留绝对值,最后根据flag进行修改。
package com.test; /** * Created by Demrystv. */ public class convertNumAtr2NumVal { public int convert(String str){ if (str == null || str.equals("")){ return 0; } //不符合格式要求,不能转 char[] chars = str.toCharArray(); if (!isValid(chars)){ return 0; } boolean flag = chars[0] == ‘-‘ ? false : true; int minq = Integer.MIN_VALUE / 10; int minr = Integer.MIN_VALUE % 10; int res = 0; int cur = 0; for (int i = flag ? 0 : 1; i < chars.length; i++) { cur = ‘0‘ - chars[i]; //用当前数字的负数形式 // 超出范围 if (cur < minq || (res == minq && cur < minr)){ return 0; } res = res * 10 + cur; } //正好比整数的最大值大1 if (flag && res == Integer.MIN_VALUE){ return 0; } return flag ? -res : res; } private boolean isValid(char[] chars){ // A02这种情况 if (chars[0] != ‘-‘ && (chars[0] < ‘0‘ || chars[0] > ‘9‘ )){ return false; } // - 或者 -012 这种情况 if (chars[0] == ‘-‘ && (chars.length == 1 || chars[1] == 0)){ return false; } // 012这种情况 if (chars[0] == ‘0‘ && chars.length > 1){ return false; } // 从第二位开始,对应的是 0B2 for (int i = 1; i < chars.length; i++) { if (chars[i] < ‘0‘ || chars[i] > ‘9‘){ return false; } } return true; } }
以上是关于字符串问题----将整数字符串转换成整数值的主要内容,如果未能解决你的问题,请参考以下文章