J'ai une liste qui va stocker Nombre objets. La liste sera remplie en analysant une liste de chaînes, chaque chaîne pouvant représenter une sous-classe de Number.
Comment analyser une chaîne en fonction d'un nombre générique plutôt que de quelque chose de spécifique, comme un entier ou un flottant?
Le nombre ne peut pas être instancié car il s'agit d'une classe abstraite. Je recommanderais de passer des nombres, mais si vous êtes sur des chaînes, vous pouvez les analyser en utilisant n'importe laquelle des sous-classes
Number num = Integer.parseInt(myString);
ou
Number num = NumberFormat.getInstance().parse(myNumber);
@Voir NumberFormat
Vous pouvez utiliser la classe Java.text.NumberFormat. Cette classe a une méthode parse () qui analyse une chaîne donnée et renvoie les objets Number appropriés.
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();
}
}
}
Quelque chose comme ce qui suit:
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;
}
vous pouvez obtenir Number
à partir de String
en utilisant commons.Apache api -> https://commons.Apache.org/proper/commons-lang/javadocs/api-3.4/index.html
Usage:
String value = "234568L"; //long in the form string value
Number number = NumberUtils.createNumber(value);
Un moyen simple consiste simplement à vérifier la présence de dot Pattern.matches("\\.")
. Si elle comporte un point, analyser comme Float.parseFloat()
et rechercher une exception. S'il y a une exception, analyser comme Double.parseDouble()
. S'il n'a pas de point, essayez simplement d'analyser Integer.parseInt()
et si cela échoue, passez à Long.parseLong()
.
Integer.valueOf(string s)
renvoie un objet Integer contenant la valeur de la chaîne spécifiée.
Entier est un objet spécialisé de Nombre