Deo zbornika Učimo Javu

Pretvaranje strune u broj

Prilikom obrade korisničkog inputa često je potrebno neki String pretvoriti u int. To se radi uz pomoć statičke metode Integer.valueOf(String s) u kombinaciji s (nestatičkom) metodom intValue() koje pripadaju klasi java.lang.Integer.

Npr. strunu “22” pretvorili bismo u celi broj (int) 22 na sljedeći način:

int i = Integer.valueOf("22").intValue();

S tipovima double, float i long postupamo slično, koristeći statičke metode Double.valueOf(String s), Float.valueOf(String s) i Long.valueOf(String s) u kombinaciji s odgovarajućim metodama doubleValue(), floatValue() i longValue() koje pripadaju klasama java.lang.Double, java.lang.Float i java.lang.Long.

Strunu “22” pretvorili bismo u long 22 ovako:

long l = Long.valueOf("22").longValue();

String “22.5” pretvorili bismo u float ili double ovako:

double x = Double.valueOf("22.5").doubleValue();
float y = Float.valueOf("22.5").floatValue();

Različite valueOf() metode relativno su inteligentne i mogu prepoznati znakove plus i minus, eksponente i ostale uobičajene brojčane formate. Međutim, ako kao argument dobiju nešto potpuno ne-numeričko, npr. “Hello World”, vjerojatno će izbaciti NumberFormatException.

Primer

Dat je program E = mc2, tako da masa u kilogramima bude prihvaćena kao korisnički unos sa komandne linije. Ovaj postupak tipičan je za mnoge programe.

class mc2 {
  public static void main (String args[]) {

    double mass;
    double c = 2.998E8;  // meters/second
    double E;

    mass = Double.valueOf(args[0]).doubleValue();
    E = mass * c * c;
    System.out.println(E + " Joules");
  }
}

Ovaj program morate pokrenuti iz konzole i proslediti mu argument na sledeći način:

% javac mc2.java
% java mc2 0.0456
4.098529824E15 Joules

Primijetite da ne bi bilo dovoljno staviti

Mass = Double.valueOf(args[0]); // izostavljena je metoda doubleValue()

Statička metoda Double.valueOf(args[0]) vratit će vrijednost tipa Double, a tek će metoda doubleValue() pretvoriti tu vrijednost u vrijednost tipa double. Zato bi navedena linija izazvala grešku u kompajliranju:

% javac mc2.java
mc2.java:8: incompatible types
found   : java.lang.Double
required: double
    mass = Double.valueOf(args[0]);
                         ^
1 error

Izvor: Elliotte Rusty Harold, Java Lecture Notes, preveo Draško Budin, priredio Damjan Pavlica.