Ellenőrizze a nullát, mielőtt felhívja az elemzést a Double.parseDouble fájlban

1. Áttekintés

Java konvertálásakor Húr a kettős, általában a Double.parseDouble (karakterlánc értéke) módszer. Ez a módszer lehetővé teszi számunkra a Húr adott ábrázolása kettős - például „2.0” - primitívnek kettős érték.

Mint a legtöbb módszerhívás esetében, ez is jó gyakorlat, ha elkerüljük az a-t nulla referencia, amely valószínűleg a NullPointerException futás közben.

Ebben az oktatóanyagban számos módszert tárunk fel, amelyekre ellenőrizhetjük nulla mielőtt felhívta Double.parseDouble. Kezdjük azzal, hogy fontolóra vesszük a Java-alapú megoldásokat, mielőtt megnéznénk néhány külső könyvtárat.

2. Miért kell ellenőrizni

Először is, értsük meg mi történik, ha nem ellenőrizzük nulla értékek az S elemzésekortring. Kezdjük azzal, hogy elhaladunk egy üresen Húr:

double emptyString = Double.parseDouble ("");

Amikor ezt a kódot futtatjuk, akkor a-t dob java.lang.NumberFormatException:

Kivétel a "main" szálban java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString (FloatingDecimal.java:1842) at sun.misc.FloatingDecimal.parseDouble (FloatingDecimal.java:110) java.lang.Double .parseDouble (Double.java:538) ...

Most vegyük fontolóra a nulla referencia:

double nullString = Double.parseDouble (null);

Nem meglepő módon a java.lang.NullPointerException ezúttal dobják:

Kivétel a "main" szálban java.lang.NullPointerException at sun.misc.FloatingDecimal.readJavaFormatString (FloatingDecimal.java:1838) at sun.misc.FloatingDecimal.parseDouble (FloatingDecimal.java:110) java.langDouble (Dupla.parancs) Double.java:538) ...

Mint tudjuk, jó gyakorlat lehet a kivételek alkalmazása az alkalmazási kódunkban. De általában, kerülnünk kell az ilyen jellegű, ellenőrizetlen kivételeket, amelyek valószínűleg egy programozási hiba következményei.

3. Hogyan ellenőrizhető a Core Java

Ebben a szakaszban több lehetőséget is megvizsgálunk nulla vagy üres értékeket használ az alapvető Java használatával.

3.1. Vanilla Java használata

Kezdjük egy egyszerű módszer meghatározásával, amely ellenőrzi, hogy az átadott érték-e nulla vagy egy üres Húr:

privát statikus kettős parseStringToDouble (karakterlánc értéke) 

Mint láthatjuk, van-e olyan érték, amelyet elemezni próbálunk nulla vagy üres ez a módszer nem számot ad vissza. Ellenkező esetben a Double.parseDouble módszer.

Megtehetjük ezt a példát egy lépéssel tovább, és felajánlhatjuk egy előre definiált alapértelmezés megadásának lehetőségét:

privát statikus kettős parseStringToDouble (String érték, dupla alapértelmezett érték) visszatérési érték == null 

Amikor meghívjuk ezt a módszert, megfelelő alapértelmezett értéket adunk meg a visszatéréshez, ha a megadott érték az nulla vagy üres:

assertThat (parseStringToDouble ("1", 2.0d)). isEqualTo (1.0d); assertThat (parseStringToDouble (null, 1.0d)). isEqualTo (1.0d); assertThat (parseStringToDouble ("", 1.0d)). isEqualTo (1.0d);

3.2. Használata Választható

Most nézzünk meg egy másik megoldást a használata Választható:

privát statikus Opcionális parseStringToOptionalDouble (String value) value.isEmpty ()? Optional.empty (): Opcionális.of (Double.valueOf (érték)); 

Ezúttal használjuk Választható mint visszatérési típus. Ezért amikor ezt a módszert alkalmazzuk, lehetőségünk van szabványos módszerek meghívására, mint pl jelen van() és üres() annak meghatározása, hogy van-e érték:

parseStringToOptionalDouble ("2"). isPresent ()

Alapértelmezett értéket is visszaadhatunk a különben a metódusa Választható:

parseStringToOptionalDouble ("1.0"). vagyElse (2.0d) parseStringToOptionalDouble (null) .orElse (2.0d) parseStringToOptionalDouble (""). vagyElse (2.0d)

4. Külső könyvtárak

Most, hogy jól megértettük, hogyan lehet ellenőrizni nulla és üres értékeket a core Java segítségével, nézzünk meg néhány külső könyvtárat.

4.1. Google Guava

Az első külső megoldás, amelyet megnézünk, a Google Guava, amely elérhető a Maven Central oldalon:

 com.google.guava guava 28.2-jre 

Egyszerűen használhatjuk a Doubles.tryParse módszer:

Doubles.tryParse (MoreObjects.firstNonNull ("1.0", "2.0")) Doubles.tryParse (MoreObjects.firstNonNull (null, "2.0"))

Ebben a példában a MoreObjects.firstNonNull metódus, amely a megadott két paraméter közül az elsőt adja vissza, ami nem nulla.

Ez a kód a legtöbb esetben jól fog működni, de képzeljünk el egy másik példát:

Doubles.tryParse (MoreObjects.firstNonNull ("", "2.0"))

Ebben az esetben, mivel az üres Húr nem nulla, a módszer visszatér nulla ahelyett, hogy dobna egy NumberFormatException. Kerüljük a kivételt, de akkor is kezelnünk kell a nulla értéket az alkalmazáskódunk bizonyos pontján.

4.2. Apache Commons Lang NumberUtils

A NumberUtils osztály számos hasznos segédprogramot kínál, amelyek megkönnyítik a számokkal való munkát.

Az Apache Commons Lang műtárgy elérhető a Maven Central-tól:

 org.apache.commons commons-lang3 3.9 

Akkor egyszerűen használhatjuk a módszert hogyDupla tól től NumberUtils:

NumberUtils.toDouble ("1.0") NumberUtils.toDouble ("1.0", 1.0d) 

Itt két lehetőségünk van:

  • Átalakítás a Húr a kettős, visszatérve 0,0d ha az átalakítás nem sikerül
  • Átalakítás a Húr a kettős, megadott alapértelmezett értéket ad meg, ha az átalakítás sikertelen

Ha elhaladunk egy üres vagy nulla érték, 0,0d alapértelmezés szerint visszatér:

assertThat (NumberUtils.toDouble ("")). isEqualTo (0.0d); assertThat (NumberUtils.toDouble (null)). isEqualTo (0.0d);

Ez jobb, mint az előző példa, mivel mindig kapunk egy kettős visszatérési érték, függetlenül attól, hogy mi történik az átalakítás során.

4.3. Vavr

Végül, de nem utolsósorban vessünk egy pillantást funkcionális megközelítést kínáló vavr.io.

Mint mindig, a műtárgy megtalálható a Maven Central-on:

 io.vavr vavr 0.10.2 

Ismét meghatározunk egy egyszerű módszert, amely a vavr-t használja Próbáld ki osztály:

public static double tryStringToDouble (String value, double defaultValue) {return Try.of (() -> Double.parseDouble (érték)). getOrElse (alapértelmezett érték); } 

Ezt a módszert pontosan ugyanúgy hívjuk meg, mint más példáinkban:

assertThat (tryStringToDouble ("1", 2.0d)). isEqualTo (1.0d); assertThat (tryStringToDouble (null, 2.0d)). isEqualTo (2.0d); assertThat (tryStringToDouble ("", 2.0d)). isEqualTo (2.0d);

5. Következtetés

Ebben a gyors bemutatóban számos módszert tártunk fel az ellenőrzésre nulla és üres húrok, mielőtt a Double.parseDouble módszer.

Mint mindig, a cikk teljes forráskódja elérhető a GitHubon.