当前位置: 代码迷 >> 综合 >> String转成基本类型
  详细解决方案

String转成基本类型

热度:64   发布时间:2024-03-06 04:41:55.0

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

在日常开发中,我们一般都会把字符串byteshortintlongfloatdouble,这些类型然后在做一些操作。

我们一般用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);} elsereturn 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

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.10</version>
</dependency>
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;}}
  相关解决方案