将字符串解析为数字

我有一个存储Number对象的列表。 该列表将通过解析字符串列表来填充,其中每个字符串可以表示Number的任何子类。

如何将字符串解析为通用数字,而不是像整数或浮点数那样特定的东西?

Number无法实例化,因为它是一个抽象类。 我建议传入Numbers,但如果你在Strings上设置,你可以使用任何子类解析它们,

Number num = Integer.parseInt(myString); 

要么

 Number num = NumberFormat.getInstance().parse(myNumber); 

@See NumberFormat

您可以使用java.text.NumberFormat类。 该类有一个parse()方法,它解析给定的字符串并返回相应的Number对象。

  public static void main(String args[]){ List myStrings = new ArrayList(); myStrings.add("11"); myStrings.add("102.23"); myStrings.add("22.34"); NumberFormat nf = NumberFormat.getInstance(); for( String text : myStrings){ try { System.out.println( nf.parse(text).getClass().getName() ); } catch (ParseException e) { e.printStackTrace(); } } } 

一种简单的方法就是检查点Pattern.matches("\\.") 。 如果它有一个点解析为Float.parseFloat()并检查exception。 如果有exception解析为Double.parseDouble() 。 如果它没有点只是尝试解析Integer.parseInt() ,如果失败则移动到Long.parseLong()

您可以使用commons.apache api – > https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/index.html从String获取Number

用法:

 String value = "234568L"; //long in the form string value Number number = NumberUtils.createNumber(value); 

类似于以下内容:

 private static Number parse(String str) { Number number = null; try { number = Float.parseFloat(str); } catch(NumberFormatException e) { try { number = Double.parseDouble(str); } catch(NumberFormatException e1) { try { number = Integer.parseInt(str); } catch(NumberFormatException e2) { try { number = Long.parseLong(str); } catch(NumberFormatException e3) { throw e3; } } } } return number; } 
 Integer.valueOf(string s) 

返回一个包含指定String值的Integer对象。

IntegerNumber的专用对象