Me­ne­tel­mää split() voidaan käyttää merk­ki­jo­no­jen ja­ka­mi­seen Java-kielessä. Se sisältää pa­ra­met­rin erot­ti­mel­le ja va­lin­nai­sen pa­ra­met­rin ali­merk­ki­jo­no­jen lu­ku­mää­räl­le. Me­ne­tel­män käytössä on myös joitakin eri­tyis­piir­tei­tä, jotka on syytä huomioida. Selitämme kaiken, mitä sinun tarvitsee tietää.

Mikä on split()?

Java-merk­ki­jo­not yh­dis­tä­vät merkkejä, numeroita ja eri­kois­merk­ke­jä. Ne ovat java.lang-luokan objekteja, ja niitä luodaan ja muokataan String-luokan avulla. Java-oh­jel­moin­ti­kie­les­sä merk­ki­jo­not voidaan myös jakaa eri ali­merk­ki­jo­noi­hin. Java-kielen split()-funktiota käytetään tiettyjen seg­ment­tien erot­ta­mi­seen merk­ki­jo­nos­ta tai merk­ki­jo­non ja­ka­mi­seen yk­sit­täi­siin osiin. Seu­raa­vas­sa esitämme tarkemmin, mitä tällä me­ne­tel­mäl­lä voidaan tehdä.

Kun jaat Java-merk­ki­jo­non split()-funk­tiol­la, saat taulukon, jossa on useita merk­ki­jo­no­ja. Tämä tulee pa­lau­tusar­vok­si.

Mikä on Java split():n syntaksi?

Java split() n pe­rus­ra­ken­teet ovat hyvin yk­sin­ker­tai­sia, mutta niitä voidaan laajentaa va­lin­nai­sil­la pa­ra­met­reil­la. Tässä on pe­rus­ver­sio:

String[] split(String regex)
java

Tässä esi­mer­kis­sä tulos on taulukon muodossa. String on merk­ki­jo­no-objekti. regex on parametri, jota käytetään mää­rit­tä­mään, mistä merk­ki­jo­no tulisi jakaa. Parametri ei ole pa­kol­li­nen, mutta sen käyttö on suo­si­tel­ta­vaa.

Li­sä­pa­ra­met­ril­la limit voit määrittää, kuinka monta ali­merk­ki­jo­noa luodaan. Sen arvo on ko­ko­nais­lu­ku. Jos se on nolla tai ne­ga­tii­vi­nen, kaikki ali­merk­ki­jo­not si­säl­ly­te­tään tu­los­tee­seen. Jos valitset po­si­tii­vi­sen arvon, tu­los­tee­seen lisätään kyseinen määrä ali­merk­ki­jo­no­ja. Li­sä­pa­ra­met­ril­la limit syntaksi on seuraava:

String[] split(String regex, int limit)
java

Kuinka käyttää split() vä­li­lyön­nil­lä erot­ti­me­na

Kat­so­taan­pa muutamia käytännön esi­merk­ke­jä. Ensin luomme merk­ki­jo­non, joka sisältää neljä sanaa: “This is an example”. Sitten jaamme merk­ki­jo­non käyt­tä­mäl­lä luk split(). In­tui­tii­vi­sin tapa jakaa tämä merk­ki­jo­no on käyttää sanojen välisiä jo olemassa olevia vä­li­lyön­te­jä. Näin se tapahtuu koodissa:

public class Main {
	public static void main(String[] args) {
		String x = "This is an example";
		String[] output = x.split(" ");
		for (String y : output) {
			System.out.println(y);
		}
	}
}
java

Tässä esi­mer­kis­sä alus­te­taan merk­ki­jo­no­muut­tu­ja x. Sitten merk­ki­jo­noon käytetään Java-komentoa split(). Parametri etsii merk­ki­jo­nos­ta vä­li­lyön­te­jä ja jakaa sen vä­li­lyön­tien kohdista. Tulos tal­len­ne­taan sitten tau­luk­koon nimeltä “output”. Silmukkaa for käytetään ali­merk­ki­jo­no­jen luet­te­loin­tiin. Java-komento System.out.println antaa seuraavan tuloksen:

This
is
an
example
java

Kuinka käyttää pilkkua erot­ti­me­na, vä­li­lyön­nil­lä ja ilman vä­li­lyön­te­jä

Voit käyttää split() myös Java-kielessä merk­ki­jo­nois­sa, jotka si­säl­tä­vät pilkuilla ero­tet­tu­ja luet­te­loi­ta. Sinun on vain käy­tet­tä­vä pientä temppua, koska ohjeesi to­teu­te­taan Java-kielessä hyvin tarkasti. Katsotaan ensin esimerkki ilman temppua. Oletetaan, että meillä on luettelo vii­kon­päi­vis­tä, jotka on erotettu toi­sis­taan pilkuilla. Nämä pilkut ovat täy­del­li­nen erot­ti­me­na regex syöt­tä­mi­seen. Jos asetamme koodin tällä tavalla, se näyttää seu­raa­val­ta:

public class Main {
	public static void main(String[] args) {
		String x = "Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday";
		String[] output = x.split(",");
		for (String y : output) {
			System.out.println(y);
		}
	}
}
java

Tässä esi­mer­kis­sä tulos ei ole aivan täy­del­li­nen:

Sunday
 Monday
 Tuesday
 Wednesday
 Thursday
 Friday
 Saturday
java

Tuloksena saamme selkeän luettelon vii­kon­päi­vis­tä. Kuitenkin jokaisen sun­nun­tain jälkeisen arvon edessä on vä­li­lyön­ti. Koska käytimme erot­ti­me­na vain pilkkua, vä­li­lyön­nit jäivät pai­kal­leen ja­ka­mispro­ses­sin aikana. Saa­dak­sem­me siis­tim­män tuloksen, meidän tulisi käyttää sekä pilkkua että vä­li­lyön­tiä erot­ti­me­na. Jos teemme niin, koodi näyttää seu­raa­val­ta:

public class Main {
	public static void main(String[] args) {
		String x = "Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday";
		String[] output = x.split(", ");
		for (String y : output) {
			System.out.println(y);
		}
	}
}
java

Tulostus on nyt paljon selkeämpi:

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
java

Kuinka jakaa Java-merk­ki­jo­not nu­me­roil­la

Voit myös käyttää split() jakamaan Java-merk­ki­jo­no­ja, jotka koostuvat nu­me­rois­ta. Esi­mer­kis­säm­me otamme pitkän avaimen, joka on jaettu pisteillä ja kak­sois­pis­teel­lä. Jos haluamme erottaa kak­sois­pis­teen jälkeiset numerot, koodi näyttäisi tältä:

public class Main {
	public static void main(String[] args) {
		String x = "194.518.552.1.17:6339";
		String[] output = x.split(":");
		for (String y : output) {
			System.out.println(y);
		}
	}
}
java

Tässä on tulos:

194.518.552.1.17
6339
java

Kuinka käyttää split() ra­joi­tus­pa­ra­met­ril­la

Kun jaat Java-merk­ki­jo­no­ja split()lla, voit käyttää myös va­lin­nais­ta limit. limit rajoittaa luotavien ali­merk­ki­jo­no­jen määrää. Tähän on kolme vaih­toeh­toa: voit määrittää sille arvon, joka on pienempi kuin 0, 0 tai suurempi kuin 0.

split(), jonka raja-arvo on alle 0

Jos syötät arvoon limit alle 0 olevan arvon, sään­nöl­li­nen lauseke so­vel­le­taan ilman ra­joi­tus­ta koko merk­ki­jo­noon. Tuloksena oleva taulukko voi olla minkä tahansa pituinen. Koodi voi näyttää seu­raa­val­ta:

public class Main {
	public static void main(String[] args) {
		String x = "Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ";
		String[] output = x.split(", ", -3);
		for (String y : output) {
			System.out.println(y);
		}
	}
}
java

Koska viimeisen sanan “Saturday” jälkeen on vä­li­lyön­ti, taulukko päättyy tyhjään merk­ki­jo­noon. Tässä on tulos:

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
java

split(), raja-arvo 0

Jos asetat pa­ra­met­rin limit arvoksi 0, sään­nöl­lis­tä lause­ket­ta käytetään jälleen niin monta kertaa kuin mah­dol­lis­ta. Taulukon pituutta ei myöskään rajoiteta. Jos viimeinen elementti on tyhjä merk­ki­jo­no, sitä ei kui­ten­kaan si­säl­ly­te­tä tuloksena olevaan tau­luk­koon.

public class Main {
	public static void main(String[] args) {
		String x = "Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ";
		String[] output = x.split(", ", 0);
		for (String y : output) {
			System.out.println(y);
		}
	}
}
java

Tulostus näyttää sa­man­lai­sel­ta kuin yllä, mutta ilman viimeistä merk­ki­jo­noa:

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
java

split(), jonka raja-arvo on suurempi kuin 0

Ero tulee selvemmin esiin, kun asetat rajaksi arvon, joka on suurempi kuin 0. Silloin se määrittää, kuinka monta ali­merk­ki­jo­noa voidaan tulostaa.

public class Main {
	public static void main(String[] args) {
		String x = "Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ";
		String[] output = x.split(", ", 3);
		for (String y : output) {
			System.out.println(y);
		}
	}
}
java

Sitten saamme tuloksen, joka eroaa mer­kit­tä­väs­ti yllä olevista:

Sunday
Monday
Tuesday, Wednesday, Thursday, Friday, Saturday
java
Siirry pää­va­lik­koon