温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java String转int的写法是什么

发布时间:2021-10-28 17:55:37 来源:亿速云 阅读:191 作者:iii 栏目:编程语言

本篇内容主要讲解“Java String转int的写法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java String转int的写法是什么”吧!

在 Java 中,String(字符串) 和 int(整形) 是两种不同的数据类型,字符串可以把许多字符串起来,整形嘛——就是整形了。

(同学们可能会疑惑,这个知识点我能不知道,别蒙我好不好?继续往下看呗。吃大餐之前,还能不来点小吃或者凉菜?)

有时候,字符串可以单纯包含一些数字,比如说“123”。大家应该都见过,当一些操作需要你输入手机验证码的时候,大部分要求输入的都是 6 位或者 4  位的随机数字,它们传递到服务器端的时候,最初的形式都是字符串类型的,然后可能再转成整形做一些处理。

对于 Java 来说,不能直接通过“+”操作符来使两个字符串类型的数字相加,来看下面的例子。

String a = "100"; String b = "50"; String c = a+b; System.out.println(c);

程序输出的结果是 10050,而不是 150。对于字符串来说,“+”操作符是用来串联的,而不是用来相加的。

(同学们可能又要催了,这个知识点我也知道啊!马上马上,重点马上就来。)

那就有必要先把字符串转成整形再来做运算了,常见的做法有两种:

第一种,使用 Integer.valueOf(),它将返回一个包装器类型 Integer,当然可以通过自动拆箱的方式将其转成 int 类型。

String a = "100"; String b= "50"; int A = Integer.valueOf(a); int B = Integer.valueOf(b);  int c = A+B; System.out.println(c);

程序输出结果如下所示:

150

第二种,使用 Integer.parseInt(),它将返回一个基本数据类型 int。

String a = "100"; String b= "50"; int A = Integer.parseInt(a); int B = Integer.parseInt(b);  int c = A+B; System.out.println(c);

程序输出结果如下所示:

150

这两种方式,优先推荐第二种,因为不涉及到自动拆箱,性能更佳。

(同学们可能急不可耐了,就这?好了,现在重点真的来了)

那除了上面这两种方式,同学们还能想到第三种吗?把字符串转成整形。是不是突然感觉脑袋里有点空?

空就对了,本篇文章最涨见识的时候,它来了!步履蹒跚地来了!

/**  * @author 沉默王二,一枚有趣的程序员  */ public class String2IntDemo {     public static void main(String[] args) {         String a = "100";         String b = "50";         int A = string2int(a);         int B = string2int(b);         int c = A + B;         System.out.println(c);     }      public static int string2int(String s) {         int num = 0;         int pos = 1;         for (int i = s.length() - 1; i >= 0; i--) {             num += (s.charAt(i) - '0') * pos;             pos *= 10;          }         return num;      } }

这段程序输出的结果同样是 150。那眼睛雪亮的同学可能就发现了,string2int()方法到底是个什么样的神奇方法,还有把字符串转成整形的功效?

首先,必须得普及一点常识,同学们需要对 ASCII 码有一点了解,就是所有的字符都有识别它们的代码——这代码就是 ASCII 码。

基于这一点,所有数字型的字符减去字符‘0’,将会得到该字符的绝对值,是一个整数。

String s = "520"; System.out.println(s.charAt(2) - '0'); System.out.println(s.charAt(1) - '0'); System.out.println(s.charAt(0) - '0');

输出结果如下所示:

0 2 5

字符串“520”的长度为 3,也就是说,下标为 2 的位置是字符‘0’——数字 520 的个位数;下标为 1 的位置是字符‘2’——数字 520  的十位数;下标为 0 的位置是字符‘5’——数字 520 的百位数。

那有些机灵点的同学可能就想到了,通过一个 for 循环,遍历一下字符串,然后计算出当前位置上的整数值,个位数乘以 1,十位数乘以 10,百位数乘以  100,然后再加起来,就是字符串对应的整数值了。

没错,没错,string2int() 方法就是这么做的,如果参数是字符串“520”,那返回的结果就是整形  520;如果参数是字符串“100”,那返回的结果就是整形 100;如果参数是字符串“50”,那返回的结果就是整形 50。

如果你是一名有追求的程序员,那么对于 Integer.valueOf() 和Integer.parseInt()  都不会太满意,因为这只是拿别人的轮子来用。而自定义方法 string2int() 就属于从头到尾的造轮子了。一想到这,是不是感觉自己开始变牛逼了?

其实,如果你肯扒拉源码的话,就会恍然大悟。

先来看 Integer.valueOf() 方法:

public static Integer valueOf(String s) throws NumberFormatException {     return Integer.valueOf(parseInt(s, 10)); }

内部调用的其实就是 int parseInt(String s, int radix) 方法。

再来看 Integer.parseInt() 方法:

public static int parseInt(String s) throws NumberFormatException {     return parseInt(s,10); }

内部调用的也是 int parseInt(String s, int radix) 方法,基数 radix 参数都是  10——同学们是不是猜到了什么?

对,你猜的八九不离十,再来看一下 int parseInt(String s, int radix) 方法的源码:

public static int parseInt(String s, int radix)         throws NumberFormatException {     /*      * WARNING: This method may be invoked early during VM initialization      * before IntegerCache is initialized. Care must be taken to not use      * the valueOf method.      */      if (s == null) {         throw new NumberFormatException("null");     }      if (radix < Character.MIN_RADIX) {         throw new NumberFormatException("radix " + radix +                 " less than Character.MIN_RADIX");     }      if (radix > Character.MAX_RADIX) {         throw new NumberFormatException("radix " + radix +                 " greater than Character.MAX_RADIX");     }      boolean negative = false;     int i = 0, len = s.length();     int limit = -Integer.MAX_VALUE;      if (len > 0) {         char firstChar = s.charAt(0);         if (firstChar < '0') { // Possible leading "+" or "-"             if (firstChar == '-') {                 negative = true;                 limit = Integer.MIN_VALUE;             } else if (firstChar != '+') {                 throw NumberFormatException.forInputString(s, radix);             }              if (len == 1) { // Cannot have lone "+" or "-"                 throw NumberFormatException.forInputString(s, radix);             }             i++;         }         int multmin = limit / radix;         int result = 0;         while (i < len) {             // Accumulating negatively avoids surprises near MAX_VALUE             int digit = Character.digit(s.charAt(i++), radix);             if (digit < 0 || result < multmin) {                 throw NumberFormatException.forInputString(s, radix);             }             result *= radix;             if (result < limit + digit) {                 throw NumberFormatException.forInputString(s, radix);             }             result -= digit;         }         return negative ? result : -result;     } else {         throw NumberFormatException.forInputString(s, radix);     } }

1)parseInt() 方法判断了 null 的情况,认为格式不正确。

2)然后判断了基数 radix 的情况,不能小于 2,不能大于 36。

3)if (len > 0) 判断了字符串长度的情况,如果为空“”,也认为格式不正确。

4)再然后判断首个字符  s.charAt(0),如果是负号“-”则认为当前字符串是一个负数;如果不是正号“+”,则认为格式不正确;如果只有一个负号或者正号,也认为格式不正确。

总之,就是比我们的自定义方法 string2int() 更严谨。

5)使用 while 循环,配合更专业的 Character.digit(s.charAt(i++), radix)  计算出每个位置上字符对应的数值,然后和基数 radix 进行相乘后使用累减的方式计算出最后的数值。

和 string2int() 有点不同,但整体上思路是一致的。

我们也可以对 string2int() 方法再完善一下,使其满足负数的情况:

public class S2IDemo {     public static void main(String[] args) {         String a = "-100";         String b = "50";         int A = string2int(a);         int B = string2int(b);         int c = A + B;         System.out.println(c);     }      public static int string2int(String s) {         boolean negative = false;         char firstChar = s.charAt(0);         if (firstChar == '-') {             negative = true;             s = s.substring(1);         }         int num = 0;         int pos = 1;         for (int i = s.length() - 1; i >= 0; i--) {             num += (s.charAt(i) - '0') * pos;             pos *= 10;          }         return negative ? -num : num;     } }

当首个字符为负号&lsquo;-&rsquo;的话,结果就返回负数,并且把原来的字符串截取掉第一位。其他不变,这时候,当 a 为“-100”,b 为“50”的时候,a + b  的结果就是 -50。

到此,相信大家对“Java String转int的写法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI