Java将字符串转换为数字,java json解析

以下示例演示如何将字符串解析为数字基元(字节、短整型、整型、长整型、浮点型、双精度型)。

例子

使用解析方法,例如 Integer#parseInt

以下是数字包装类中定义的分析方法。

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 

以下示例将字符串解析为 int

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

通常,将动态字符串传递给上述分析方法之一是不安全的。例如:

package com.logicbig.example;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。

package com.logicbig.example;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

通过在解析前检查输入

以下示例使用正则表达式模式检查输入字符串是否为整数:

package com.logicbig.example;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'5Input: '05'5Input: '000'0Input: '-5'-5Input: '+5'5Input: '-'-1Input: 'five'-1

它可以工作,但很难为数字检查创建一个完美的正则表达式,例如上面的示例没有照顾整数范围, 所以任何超出 int 范围的输入,仍将抛出 NumberFormatException。

对于浮点检查,我们可以使用 [+-]?([0-9]*[.])?[0-9]+

通过使用Apache lang NumberUtils

pom.xml

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.10</version></dependency>
package com.logicbig.example;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-5550

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) 

上述所有方法都在内部捕获 NumberFormatException。例如

 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; } }

原创文章,作者:芒小种,如若转载,请注明出处:http://www.fhgg.net/shenghuobaike/15294.html

本文来自投稿,不代表【食趣网】立场,如若转载,请注明出处:http://www.fhgg.net/

(0)
上一篇 2023年1月27日 下午4:07
下一篇 2023年1月27日 下午4:21

相关推荐

发表回复

登录后才能评论