将字符串解析为数字

时间:2011-11-27 15:36:43

标签: java generics numbers

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

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

6 个答案:

答案 0 :(得分:39)

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

Number num = Integer.parseInt(myString);

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

@See NumberFormat

答案 1 :(得分:5)

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

        public static void main(String args[]){
            List<String> myStrings = new ArrayList<String>(); 
            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();
               }
           }
        }

答案 2 :(得分:2)

如下所示:

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

用法:

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

答案 5 :(得分:0)

Integer.valueOf(string s)

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

整数 Number

的专用对象