web-dev-qa-db-fra.com

Analyser la chaîne en nombre

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?

14
Matt

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

39
Andrew

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();
               }
           }
        }
5
Drona

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

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);
1
Venks

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()

1
Justin Thomas
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

0
Max