中如何将字符串存入矩阵_如何将字符串转化成基本类型

如何将字符串转化成基本类型

在日常开发中,我们一般都会把字符串byte, short, int, long, float, double,这些类型然后在做一些操作。

我们一般用parse方法 例如 Integer.parseInt
下面是javaNumber自带的方法

java.lang.Byte

public static byte parseByte(String s) throws NumberFormatException 

java.lang.Short

public static short parseShort(String s) throws NumberFormatException 

java.lang.Integer

public static int parseInt(String s) throws NumberFormatException

java.lang.Long

public static long parseLong(String s) throws NumberFormatException

java.lang.Float

public static float parseFloat(String s) throws NumberFormatException

java.lang.Double

public static double parseDouble(String s) throws NumberFormatException

我们举一个例子来验证下,就来测试下Stringint

public class Example1 {
    public static void main(String[] args) {
        int i = Integer.parseInt("54");
        System.out.println(i);
    }
}

得到的结果:

54

但是一般情况下它是不安全的,毕竟每个都抛出throws NumberFormatException,例如下面?

public class Example2 {
    public static void main(String[] args) {
        String intString = "five";
        int i = Integer.parseInt(intString);
        System.out.println(i);
    }
}

得到的结果:

ava.lang.NumberFormatException: For input string: "five"
 at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
 at java.base/java.lang.Integer.parseInt(Integer.java:652)
 at java.base/java.lang.Integer.parseInt(Integer.java:770)
 at com.logicbig.example.Example2.main(Example2.java:5)

如何操作能安全的得到字符串得到数字。

第一种,我们去捕获java.lang.NumberFormatException异常,例如下面的做法

public class Example3 {
 public static void main(String[] args) {
     int i = parseStringToInt("five", -1);
     System.out.println(i);
 }

 private static int parseStringToInt(String input, int defaultValue){
     try {
         return Integer.parseInt(input);
     } catch (NumberFormatException e) {
         return defaultValue;
     }
 }

结果:

-1

这样如果转换出问题,我们就可以得到默认值-1

第二种,我们在转换之前先用正则判断一下是否满足。例如下面?

public class Example4 {
    public static void main(String[] args) {
        int i = parseToInt("5", -1);
        System.out.println(i);

        i = parseToInt("05", -1);
        System.out.println(i);

        i = parseToInt("000", -1);
        System.out.println(i);

        i = parseToInt("-5", -1);
        System.out.println(i);

        i = parseToInt("+5", -1);
        System.out.println(i);

        i = parseToInt("-", -1);
        System.out.println(i);
        i = parseToInt("five", -1);
        System.out.println(i)
    }
    private static int parseToInt(String input, int defaultInt) {
        System.out.printf("Input: '%s'%n", input);
        if (input == null) {
            return defaultInt;
        } else if (input.matches("[-+]?\\d+")) {
            return Integer.parseInt(input);
        } else
            return defaultInt;
        } 
    }
}

结果:

Input: '5'
5
Input: '05'
5
Input: '000'
0
Input: '-5'
-5
Input: '+5'
5
Input: '-'
-1
Input: 'five'
-1

但是这样就安全了吗?如果是Integer.parseInt("2147483648");

通过使用Apache lang NumberUtils

pom.xml

org.apache.commonscommons-lang33.10
import org.apache.commons.lang3.math.NumberUtils;

public class Example5 {
    public static void main(String[] args) {
        int i = NumberUtils.toInt("5", 0);
        System.out.println(i);

        i = NumberUtils.toInt("-5", 0);
        System.out.println(i);


        i = NumberUtils.toInt("+5", 0);
        System.out.println(i);

        i = NumberUtils.toInt("05", 0);
        System.out.println(i);

        i = NumberUtils.toInt("five", 0);
        System.out.println(i);  
    }
}

结果:

5
-5
5
5
0

NumberUtils提供了如下方法

public static byte toByte(final String str, final byte defaultValue) public static short toShort(final String str, final short defaultValue) public static int toInt(final String str, final int defaultValue) public static long toLong(final String str, final long defaultValue) public static float toFloat(final String str, final float defaultValue) public static double toDouble(final String str, final double defaultValue)

上面的方法其实就是帮我做了捕获异常。下面是源码。

  public static double toDouble(final String str, final double defaultValue) {
      if (str == null) {
          return defaultValue;
      }
      try {
          return Double.parseDouble(str);
      } catch (final NumberFormatException nfe) {
          return defaultValue;
      }
 }

b7c07524b34aabb19d8e679fe3e95e07.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值