Jos haluat muuntaa merk­ki­jo­non int-tyypiksi Java-kielessä, sinulla on kaksi yk­sin­ker­tais­ta vaih­toeh­toa – parseInt() ja valueOf(). Molemmat vaih­toeh­dot toimivat kuitenkin vain, jos merk­ki­jo­no sisältää yk­si­no­maan ko­ko­nais­lu­ku­ja eikä ylitä int-tie­to­tyy­pin ar­voa­luet­ta.

Mikä on merk­ki­jo­non muun­ta­mi­nen ko­ko­nais­lu­vuk­si Java-kielessä?

Java-merk­ki­jo­not ovat yh­dis­tel­miä, jotka voivat sisältää kirjaimia, numeroita ja eri­kois­merk­ke­jä. Java-oh­jel­moin­ti­kie­les­sä ko­ko­nais­lu­ku­jen muodossa olevat numerot voidaan tallentaa int-tyyp­pi­se­nä. Jos merk­ki­jo­no sisältää vain ko­ko­nais­lu­ku­ja, sen voi muuntaa Java-pri­mi­tii­vik­si int, joka tar­koit­taa ko­ko­nais­lu­kua. Java-int-tyypin muun­ta­mi­seen merk­ki­jo­nok­si on viisi eri tapaa, mutta Java-merk­ki­jo­non muun­ta­mi­seen int-tyypiksi on vain kaksi pää­asial­lis­ta tapaa. Ne ovat Integer parseInt() ja Integer.valueOf(). Seu­raa­vas­sa selitämme näiden me­ne­tel­mien toimintaa käytännön esi­merk­kien avulla.

Huomio

Huomaa, että tämä muunnos toimii vain, jos kyseinen luku on välillä -2147483648 ja 2147483647. Suurempia tai pienempiä lukuja ei voi esittää int-tie­to­tyy­pil­lä.

Käyt­tö­oh­jeet Integer.parseInt()

parseInt() on staat­ti­nen metodi, joka kuuluu Integer-luokkaan ja palauttaa komplek­si­sen da­ta­tyy­pin merk­ki­jo­non nu­mee­ri­sen arvon pri­mi­tii­vi­sen da­ta­tyy­pin int muodossa. Sen syntaksi on seuraava:

static int parseInt(String s)
java

Kat­so­taan­pa esi­merk­kiä. Ensin alustamme merk­ki­jo­non, joka sisältää arvon “7312” eikä mitään muuta. Sitten muunnamme kyseisen Java-merk­ki­jo­non int-tyypiksi käyt­tä­mäl­lä parseInt() ja lopuksi tu­los­tam­me tuloksen Java-ko­men­nol­la System.out.println. Koodi näyttää seu­raa­val­ta:

public class Main {
	public static void main(String args[]) {
		String str = "7312";
		int number = Integer.parseInt(str);
		System.out.println("The numerical value of the string is: " + number);
	}
}
java

Tässä on tulos:

The numerical value of the string is: 7312
``
However, this only works if the string exclusively **contains whole numbers**. If it contains anything else, you’ll get an error message:
```java
public class Main {
	public static void main(String args[]) {
		String str = "The number is 7312";
		int number = Integer.parseInt(str);
		System.out.println("The number from the string is: " + number);
	}
}
java

Tässä on vir­heil­moi­tus:

Exception in thread "main" java.lang.NumberFormatException: For input string: " The number is 7312"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:661)
at java.base/java.lang.Integer.parseInt(Integer.java:777)
at Main.main(Main.java:4)
java

Käyt­tö­oh­jeet Integer.valueOf()

Integer.valueOf()toinen Integer-luokan menetelmä. Se tulostaa merk­ki­jo­no-objektin de­si­maa­li­muo­dos­sa ja on siten hyö­dyl­li­nen myös Java-merk­ki­jo­non muun­ta­mi­ses­sa int-tyypiksi. Sen syntaksi on seuraava:

static int valueOf(int a)
java

Kat­so­taan­pa yk­sin­ker­tais­ta esi­merk­kiä:

public class Main {
	public static void main(String args[]) {
		String newString = "7312";
		int parNumber = Integer.valueOf(newString);
		System.out.println("The numerical value of the string is: " + parNumber);
	}
}
java

Saat jälleen seuraavan tuloksen:

The numerical value of the string is: 7312
java

Jos merk­ki­jo­no sisältää jotain muuta kuin ko­ko­nais­lu­vun, saamme saman vir­heil­moi­tuk­sen kuin edellä.

Siirry pää­va­lik­koon