我有一个列表,用于存储Number个对象。该列表将通过解析字符串列表来填充,其中每个字符串可以表示Number的任何子类。
如何将字符串解析为通用数字,而不是像整数或浮点数那样特定的东西?
答案 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
的专用对象