{"id":619,"date":"2015-01-17T17:07:58","date_gmt":"2015-01-17T16:07:58","guid":{"rendered":"http:\/\/www.webotlet.hu\/?p=619"},"modified":"2024-10-23T21:01:13","modified_gmt":"2024-10-23T19:01:13","slug":"java-programozas-15-stringek","status":"publish","type":"post","link":"https:\/\/www.webotlet.hu\/?p=619","title":{"rendered":"Java programoz\u00e1s 15. &#8211; String"},"content":{"rendered":"<h1>String, avagy minden, amit beg\u00e9pelhetsz (vagy nem)<\/h1>\n<p>A Java programoz\u00e1si nyelvben, mint megtudhattad, t\u00f6bbf\u00e9le v\u00e1ltoz\u00f3t\u00edpus l\u00e9tezik. Ezek egy r\u00e9sze egyszer\u0171 (primit\u00edv) t\u00edpus, de vannak \u00f6sszetett, komplexebb t\u00edpusok, ezek minden esetben objektumok. Ezek egyike a karakterl\u00e1nc, m\u00e1s nev\u00e9n String.<\/p>\n<p>Mint a neve is mutatja, ez egy oszt\u00e1ly. Ez honnan l\u00e1tszik? Nagy kezd\u0151bet\u0171vel \u00edrtam a nev\u00e9t. Nem csak \u00e9n, m\u00e1r az alap program main programr\u00e9sz\u00e9ben is l\u00e1thattad sz\u00e1mtalanszor:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">public static void main( String&#x5B;] args )<\/pre>\n<p>A Stringek karakterekb\u0151l \u00e1llnak, melyek egym\u00e1s ut\u00e1n meghat\u00e1rozott sorrendben karakterl\u00e1ncot alkotnak. A Stringek nem csak ki\u00edrathat\u00f3 karaktereket tartalmazhatnak, olyanok is lehetnek benne, amelyek nem l\u00e1tszanak, ezekr\u0151l majd k\u00e9s\u0151bb sz\u00f3t ejtek.<\/p>\n<h2>String deklar\u00e1ci\u00f3 \u00e9s \u00e9rt\u00e9kad\u00e1s<\/h2>\n<p>A String deklar\u00e1ci\u00f3ja a k\u00f6vetkez\u0151k\u00e9ppen n\u00e9z ki:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">String s;<\/pre>\n<p>A Stringnek meglehet\u0151sen sokf\u00e9le m\u00f3don adhat\u00f3 kezd\u0151\u00e9rt\u00e9k, ebb\u0151l l\u00e1ssunk egyet, igaz, ez a forma nem t\u00fal gyakori, l\u00e9trehozok egy s nev\u0171 Stringet:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">String s = new String();<\/pre>\n<p>L\u00e9trehoztam egy \u00faj, \u00fcres Stringet. Ezt mondjuk gyakran nem \u00edgy haszn\u00e1ljuk. A new kulcssz\u00f3val egy \u00faj objektumot tudok l\u00e9trehozni, ami az adott oszt\u00e1lyb\u00f3l egy \u00faj p\u00e9ld\u00e1ny. Az el\u0151z\u0151, t\u00f6mb\u00f6kr\u0151l sz\u00f3l\u00f3 anyag ut\u00e1n ez m\u00e1r nagy meglepet\u00e9st tal\u00e1n nem jelent, hiszen ott is ilyesmit \u00edrtunk, de a new-r\u00f3l \u00e9s szerep\u00e9r\u0151l az <a title=\"Java programoz\u00e1s 13. \u2013 Oszt\u00e1lyok \u00e9s objektumok\" href=\"http:\/\/www.webotlet.hu\/?p=675\">Oszt\u00e1lyok \u00e9s objektumok<\/a> t\u00e9mak\u00f6rben olvashatt\u00e1l r\u00e9szletesebben. A String m\u00e9rete is \u00e1lland\u00f3, csak\u00fagy, mint a t\u00f6mb\u00f6k\u00e9.<\/p>\n<p><strong>A String a Java nyelvben megv\u00e1ltozhatatlan!<\/strong><\/p>\n<p>Ha egyszer be\u00e1ll\u00edtottad az \u00e9rt\u00e9k\u00e9t, akkor az att\u00f3l kezdve mindig ugyanaz marad. N\u00e9zz\u00fcnk akkor p\u00e1r m\u00e1sik \u00e9rt\u00e9kad\u00e1si lehet\u0151s\u00e9get:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s1 = &quot;abcd&quot;;\r\n\r\nchar data&#x5B;] = {'a', 'b', 'c'};\r\nString str = new String(data);\r\n\r\nString str2 = new String(&quot;xyz&quot;); \/\/ ezt az\u00e9rt ker\u00fclj\u00fck..\r\n\r\nString s2 = s1 + &quot;efgh&quot;;\r\n<\/pre>\n<p>Az els\u0151 esetben a String formai megjelen\u00e9s\u00e9nek megfelel\u0151en adok meg egy \u00e9rt\u00e9ket. A m\u00e1sodik esetben l\u00e9trehozok egy karakterekb\u0151l \u00e1ll\u00f3 t\u00f6mb\u00f6t, amit odaadok a new-val l\u00e9trehozand\u00f3 String objektumnak, hogy abb\u00f3l \u00e1ll\u00edtsa el\u0151 mag\u00e1t. A harmadik esetben szinten new-val hozok l\u00e9tre egy \u00faj String objektumot, \u00e9s odaadom neki egy liter\u00e1lk\u00e9nt azt a karakterl\u00e1ncot, ami a tartalma legyen. Az utols\u00f3 p\u00e9ld\u00e1ban egy Stringet egy m\u00e1sik b\u0151v\u00edt\u00e9s\u00e9vel hozok l\u00e9tre, itt a + oper\u00e1tor mint az \u00f6sszef\u0171z\u00e9s m\u0171veleti jele szerepel.<\/p>\n<p>A k\u00f6vetkez\u0151 p\u00e9lda kicsit fura lehet:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abcd&quot;;\r\nSystem.out.println(s); \/\/ abcd\r\n\r\ns += &quot;efgh&quot;;\r\nSystem.out.println(s); \/\/ abcdefgh\r\n<\/pre>\n<p>Azt mondtam, hogy a String megv\u00e1ltoztathatatlan. Itt m\u00e9gis hozz\u00e1f\u0171ztem valamit \u00e9s az s-nek l\u00e1tsz\u00f3lag t\u00e9nyleg megv\u00e1ltozik a tartalma. \u00c9s m\u00e9g m\u0171k\u00f6dik is! Igen \u00e1m, de a h\u00e1tt\u00e9rben nem ez t\u00f6rt\u00e9nik:<\/p>\n<ol>\n<li>L\u00e9trehozunk egy String objektumot, be\u00e1ll\u00edtjuk a kezd\u0151\u00e9rt\u00e9k\u00e9t, \u00e9s a c\u00edm\u00e9t hozz\u00e1rendelj\u00fck az s v\u00e1ltoz\u00f3hoz.<\/li>\n<li>Amikor az s-hez hozz\u00e1f\u0171z\u00fcnk valamit, l\u00e9trej\u00f6n egy \u00faj String objektum a h\u00e1tt\u00e9rben.<\/li>\n<li>Ennek \u00e9rt\u00e9ke az eredeti String objektum tartalma \u00e9s az &#8220;efgh&#8221; liter\u00e1l \u00f6sszef\u0171z\u00e9s\u00e9b\u0151l kialak\u00edtott karakterl\u00e1nc lesz.<\/li>\n<li>Az s v\u00e1ltoz\u00f3hoz az \u00faj objektum c\u00edme lesz hozz\u00e1rendelve.<\/li>\n<li>Az eredeti s-hez rendelt objektum meg v\u00e1ltoz\u00f3 n\u00e9lk\u00fcl marad, hiszen a v\u00e1ltoz\u00f3hoz m\u00e1r egy \u00faj c\u00edmet rendelt\u00fcnk.<\/li>\n<li>A v\u00e1ltoz\u00f3hoz nem rendelt objektumot emiatt hamarosan kitakar\u00edtj\u00e1k a kupacb\u00f3l (de addig is foglalja a mem\u00f3ri\u00e1t!)<\/li>\n<\/ol>\n<h2>Speci\u00e1lis String liter\u00e1lok<\/h2>\n<p>Amikor egy Stringnek \u00e9rt\u00e9ket szeretn\u00e9nk adni, l\u00e9teznek bizonyos speci\u00e1lis karakterek. Ezek megad\u00e1s\u00e1hoz sz\u00fcks\u00e9g\u00fcnk lehet a backslash karakterre, ami a \\ (visszaper jel). Ezen speci\u00e1lis karakterekre p\u00e9lda:<\/p>\n<ol>\n<li>\\n (sordob\u00e1s)<\/li>\n<li>\\t (tabul\u00e1tor)<\/li>\n<li>\\&#8221; (id\u00e9z\u0151jel karakter)<\/li>\n<li>\\\\ (maga a backslash karakter)<\/li>\n<\/ol>\n<p>Mi van akkor, ha a Stringben szeretn\u00e9k id\u00e9z\u0151jeleket megjelen\u00edteni?<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">Michael &quot;Air&quot; Jordan<\/pre>\n<p>Ebben az esetben a k\u00f6vetkez\u0151 dolgot tehetj\u00fck:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;Michael \\&quot;Air\\&quot; Jordan\\n&quot;;\r\n<\/pre>\n<p>Itt a norm\u00e1l m\u00f3don megadott id\u00e9z\u0151jelek a liter\u00e1l elej\u00e9t \u00e9s v\u00e9g\u00e9t jelentik. Viszont a Stringben szeretn\u00e9nk id\u00e9z\u0151jelet szerepeltetni, ez\u00e9rt a backslash (kiv\u00e9tel) karaktert tessz\u00fck el\u00e9, \u00edgy tudni fogja a Java, hogy az Air sz\u00f3 el\u0151tti \u00e9s ut\u00e1ni id\u00e9z\u0151jelek nem a String hat\u00e1rait jelzik, hanem a String r\u00e9szei! A v\u00e9g\u00e9n a \\n pedig egy sordob\u00e1st tesz a n\u00e9v v\u00e9g\u00e9re.<\/p>\n<p>\u00c9s mi van akkor, ha mag\u00e1t a \\ karaktert szerepeltetn\u00e9nk a Stringben? \u00d6nmaga hogy lesz kiv\u00e9tel? Ezt szeretn\u00e9nk megjelen\u00edteni:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">Gondolkodom, tehat vagyok. \\Descartes\\<\/pre>\n<p>Itt a String r\u00e9sze lenne az a karakter, amivel a kiv\u00e9teleket szoktuk jelezni, de itt \u00f6nmag\u00e1t akarjuk megjelen\u00edteni. Akkor hogy oldjuk meg, hogy a \\ jelet a String r\u00e9szek\u00e9nt kezelje? Ekkor a k\u00f6vetkez\u0151 a teend\u0151:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;Gondolkodom, tehat vagyok. \\\\Descartes\\\\&quot;;\r\n<\/pre>\n<p>Egyszer\u0171en a \\ jel el\u00e9 kell egy m\u00e1sik, ami ez\u00e1ltal \u00f6nmag\u00e1t teszi kiv\u00e9tell\u00e9. \u00c9s mi van akkor, ha ez a String v\u00e9g\u00e9n szerepel: \\\\&#8221; ? Ez sem gond, mert ezt nem egy kiv\u00e9teles id\u00e9z\u0151jelnek \\&#8221; fogja tekinteni, hanem az els\u0151 \\ jel teszi kiv\u00e9tell\u00e9 a m\u00e1sodik \\ jelet, \u00edgy az id\u00e9z\u0151jel norm\u00e1l m\u00f3don a String liter\u00e1l v\u00e9g\u00e9t jelenti.<\/p>\n<h2>String met\u00f3dusok<\/h2>\n<p>L\u00e1ssuk akkor, hogy mit kezdhet\u00fcnk a Stringekkel. Amikor egy String t\u00edpus\u00fa v\u00e1ltoz\u00f3t haszn\u00e1lunk, val\u00f3j\u00e1ban egy objektummal dolgozunk. A v\u00e1ltoz\u00f3 csak az objektumra mutat. Az objektumoknak, mint a m\u00e1r eml\u00edtett <a title=\"Java programoz\u00e1s 13. \u2013 Oszt\u00e1lyok \u00e9s objektumok\" href=\"http:\/\/www.webotlet.hu\/?p=675\">Oszt\u00e1lyok \u00e9s objektumok<\/a> t\u00e9mak\u00f6rb\u0151l megtudhattad v\u00e1ltoz\u00f3i \u00e9s met\u00f3dusai vannak. A Stringek v\u00e1ltoz\u00f3ir\u00f3l nem kell tudnod, de a met\u00f3dusair\u00f3l, mellyel mag\u00e1t a Stringet kezelheted, ann\u00e1l t\u00f6bbet! L\u00e1ssuk akkor ezeket p\u00e9ld\u00e1kon kereszt\u00fcl, hogy mire is haszn\u00e1lhat\u00f3k. A felsorol\u00e1s nem lesz teljes, de a legfontosabbakat \u00fagy gondolom, hogy tartalmazza.<\/p>\n<h4>Stringek egyenl\u0151s\u00e9g\u00e9nek vizsg\u00e1lata &#8211; equals()<\/h4>\n<p>A Stringek objektumok, \u00e9s k\u00e9t objektum csak akkor egyenl\u0151, ha az val\u00f3j\u00e1ban ugyanaz az objektum.<\/p>\n<p><strong>Objektumok k\u00f6z\u00f6tt az == oper\u00e1torral v\u00e9gzett egyenl\u0151s\u00e9g vizsg\u00e1lat nem haszn\u00e1lhat\u00f3!<\/strong><\/p>\n<p>Itt egy p\u00e9lda, ami ennek l\u00e1tsz\u00f3lag ellentmond. Az s1 \u00e9s s2 Stringek ugyanazt az \u00e9rt\u00e9ket kapj\u00e1k meg kezd\u0151\u00e9rt\u00e9kk\u00e9nt, \u00e9s az == m\u0171k\u00f6dik. Itt\u00a0 a h\u00e1tt\u00e9rben a Java ford\u00edt\u00f3program csal egy kicsit, l\u00e1tva, hogy a k\u00e9t liter\u00e1l ugyanaz, amivel a String-et l\u00e9trehozod, ez\u00e9rt ugyanazt az objektumot rendeli hozz\u00e1 mindkett\u0151h\u00f6z:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s1 = &quot;abcd&quot;;\r\nString s2 = &quot;abcd&quot;;\r\n\r\nSystem.out.println(s1 == s2); \/\/ true (???)\r\n<\/pre>\n<p>R\u00f6gt\u00f6n kibukik azonban a k\u00f6vetkez\u0151 p\u00e9ld\u00e1n\u00e1l az, hogy mi\u00e9rt is emeltem ki azt, hogy == oper\u00e1torral nem hasonl\u00edtunk \u00f6ssze objektumokat. N\u00e9zz\u00fck a k\u00f6vetkez\u0151 p\u00e9ld\u00e1t:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s1 = &quot;abcd&quot;;\r\nString s2 = new String(&quot;abcd&quot;);\r\n\r\nSystem.out.println(s1 == s2); \/\/ false (!!)\r\n<\/pre>\n<p>Itt m\u00e1r val\u00f3ban k\u00fcl\u00f6nb\u00f6zik egym\u00e1st\u00f3l a k\u00e9t String. De akkor hogyan n\u00e9zhetj\u00fck meg, hogy a k\u00e9t String egyenl\u0151-e, ha az objektumok nem azok? K\u00e9t Stringet akkor tekint\u00fcnk egyenl\u0151nek, ha ugyanaz a tartalmuk, vagyis ugyanazt a karakterl\u00e1ncot tartalmazz\u00e1k. Ezt az \u00f6sszehasonl\u00edt\u00e1st egy met\u00f3dussal oldott\u00e1k meg.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s1 = &quot;abcd&quot;;\r\nString s2 = new String(&quot;abcd&quot;);\r\n\r\nSystem.out.println( s1.equals(s2) ); \/\/ true\r\n<\/pre>\n<p>Az equals() met\u00f3dust egy String objektumban (formailag az objektum c\u00edm\u00e9t t\u00e1rol\u00f3 v\u00e1ltoz\u00f3ban) kell megh\u00edvni, \u00e9s oda kell adni neki azt a m\u00e1sik Stringet, aminek a tartalm\u00e1t szeretn\u00e9nk a saj\u00e1tj\u00e1val \u00f6sszehasonl\u00edtani. A feladat szempontj\u00e1b\u00f3l teljesen mindegy, hogy melyiket hasonl\u00edtjuk melyikhez, az s1.equals(s2) helyett az s2.equals(s1) is haszn\u00e1lhat\u00f3.<\/p>\n<h4>Stringek \u00f6sszef\u0171z\u00e9se &#8211; concat()<\/h4>\n<p>El\u0151fordulhat, hogy egy Stringet b\u0151v\u00edten\u00fcnk kell. Hozz\u00e1 akarunk f\u0171zni valamit. Eml\u00e9kszel, azt mondtam, hogy a String megv\u00e1ltoztathatatlan. Amikor b\u0151v\u00edtj\u00fck, akkor egy \u00fajat hozunk l\u00e9tre, melynek a hivatkoz\u00e1s\u00e1t \u00e1t\u00e1ll\u00edtjuk az eredeti v\u00e1ltoz\u00f3ban.<\/p>\n<p>M\u00e9gis rendelkez\u00e9sre \u00e1ll egy met\u00f3dus, concat() n\u00e9ven, mellyel Stringeket lehet \u00f6sszef\u0171zni. M\u00e9g egyszer hangs\u00falyozom, csak Stringeket.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;Indul&quot;;\r\ns = s.concat(&quot; a&quot;);\r\ns = s.concat(&quot; gorog&quot;);\r\ns = s.concat(&quot; aludni&quot;);\r\nSystem.out.println(s);\r\n<\/pre>\n<p>Amennyiben nem csak Stringeket szeretn\u00e9nk \u00f6sszef\u0171zni, minden tov\u00e1bbi n\u00e9lk\u00fcl haszn\u00e1lhatjuk a + oper\u00e1tort. Ez a nem String v\u00e1ltoz\u00f3kat String v\u00e1ltoz\u00f3ra konvert\u00e1lva v\u00e9gzi el az \u00f6sszef\u0171z\u00e9st. Ez az oper\u00e1tor, azonban lassabb, mint a concat() met\u00f3dus, ez\u00e9rt ha t\u00f6bb \u00f6sszef\u0171z\u00e9sr\u0151l van sz\u00f3 \u00e9s csak String t\u00edpus\u00faakat szeretn\u00e9l \u00f6sszef\u0171zni, akkor \u00e9rdemesebb a concat()-ot haszn\u00e1lni.<\/p>\n<p>A sebess\u00e9g m\u00e9r\u00e9sek alapj\u00e1n egy\u00e9bk\u00e9nt a concat() met\u00f3dus \u00fagynevezett StringBuilder-t haszn\u00e1l a h\u00e1tt\u00e9rben, vagyis a ford\u00edt\u00f3 tr\u00fckk\u00f6ket vet be a sebess\u00e9g \u00e9s mem\u00f3riak\u00edm\u00e9l\u00e9s \u00e9rdek\u00e9ben, \u00e9s ezeket a felhaszn\u00e1l\u00f3 tudta n\u00e9lk\u00fcl oldja meg.<\/p>\n<h4>Stringek hossza &#8211; length()<\/h4>\n<p>B\u00e1rmely String m\u00e9ret\u00e9t (hossz\u00e1t) megkaphatjuk, ha megh\u00edvjuk a length() met\u00f3dus\u00e1t:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">s.length()<\/pre>\n<h4>String adott karaktere &#8211; charAt()<\/h4>\n<p>Egy adott String b\u00e1rmelyik karakter\u00e9t megkaphatjuk a charAt(i) met\u00f3dussal, ahova az i hely\u00e9re \u00edrjuk be, hogy h\u00e1nyadik karaktert szeretn\u00e9nk megkapni. A karakterek indexel\u00e9se a t\u00f6mb\u00f6kh\u00f6z hasonl\u00f3an 0-val kezd\u0151dik. Fontos, hogy ez egy karakter t\u00edpust ad vissza! B\u00e1rmely String els\u0151 karaktere az s.charAt(0), az utols\u00f3 pedig az s.charAt( s.length()-1 )<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\ns.charAt(3) \/\/ a 4. karakter (3-as index!)\r\ns.charAt(0) \/\/ els\u0151 karakter (\u00fcres Stringre indexel\u00e9si hiba!)\r\ns.charAt(s.length() - 1) \/\/ utols\u00f3 karakter\r\n<\/pre>\n<h4>Stringek \u00f6sszehasonl\u00edt\u00e1sa rendez\u00e9s miatt &#8211; compareTo()<\/h4>\n<p>A Stringek \u00f6sszehasonl\u00edt\u00e1s\u00e1n m\u00e1r t\u00fal vagyunk, de van egy m\u00e1sik t\u00edpus is, amely fontos, ez pedig a bet\u0171rend.<\/p>\n<p>K\u00e9t String \u00f6sszehasonl\u00edt\u00e1sa rendez\u00e9si szempontb\u00f3l a compareTo() met\u00f3dussal t\u00f6rt\u00e9nik. Ezt hasonl\u00f3an az equals() met\u00f3dushoz mindk\u00e9t Stringre meg lehet h\u00edvni a m\u00e1sikat odaadva param\u00e9terk\u00e9nt, de itt m\u00e1r nem mindegy a sorrend! A compareTo() egy sz\u00e1mot ad vissza eredm\u00e9ny\u00fcl. Ha a sz\u00e1m pozit\u00edv, akkor az a String amelyikre megh\u00edvtuk a met\u00f3dust a param\u00e9terben megadott String m\u00f6g\u00f6tt tal\u00e1lhat\u00f3 az abc rendnek megfelel\u0151en. Ha a sz\u00e1m negat\u00edv, akkor el\u0151tte. 0 eset\u00e9n a k\u00e9t String tartalma egyforma. Ezt a met\u00f3dust haszn\u00e1lhatjuk akkor, ha az a feladat, hogy Stringeket rendezz\u00fcnk sorba.<\/p>\n<p><strong>Az \u00f6sszehasonl\u00edt\u00e1s megk\u00fcl\u00f6nb\u00f6zteti a kis \u00e9s nagybet\u0171ket!<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s1 = &quot;Geza&quot;;\r\nString s2 = &quot;Bela&quot;;\r\nSystem.out.println(s1.compareTo(s2)); \/\/ 5\r\n\/* Az eredm\u00e9ny pozit\u00edv, ez azt jelenti, hogy az s1 String (amire a\r\n * met\u00f3dust megh\u00edvtuk) a param\u00e9terben szerepl\u0151 s2 Stringhez k\u00e9pest\r\n * h\u00e1tr\u00e9bb tal\u00e1lhat\u00f3 rendez\u00e9si szempontb\u00f3l. Maga az 5-\u00f6s \u00e9rt\u00e9k azt\r\n * jelenti, hogy ann\u00e1l a pontn\u00e1l, ahol a k\u00e9t String k\u00fcl\u00f6nb\u00f6zik\r\n * a k\u00e9t \u00f6sszehasonl\u00edtott karakter t\u00e1vols\u00e1ga 5 (B-G)\r\n *\/\r\n\r\nString s3 = &quot;Geza&quot;;\r\nString s4 = &quot;bela&quot;;\r\nSystem.out.println(s3.compareTo(s4)); \/\/ -27\r\n\/* Az eredm\u00e9ny negat\u00edv, ez azt jelenti, hogy az s3 Stringhez k\u00e9pest\r\n * az s4 String h\u00e1tr\u00e9bb(!) tal\u00e1lhat\u00f3. Ez az\u00e9rt van, mert a k\u00f3dt\u00e1bl\u00e1ban\r\n * a nagybet\u0171k megel\u0151zik a kisbet\u0171ket, \u00e9s a compareTo() figyelembe\r\n * veszi ezt. Ez kik\u00fcsz\u00f6b\u00f6lhet\u0151 a k\u00f6vetkez\u0151 met\u00f3dussal:\r\n *\/\r\n\r\nSystem.out.println(s3.compareToIgnoreCase(s4)); \/\/ 5\r\n\/* a compareToIgnoreCase() met\u00f3dus \u00fagy hasonl\u00edtja \u00f6ssze a Stringeket,\r\n * hogy figyelmen k\u00edv\u00fcl hagyja a kis \u00e9s nagybet\u0171k k\u00f6z\u00f6tti k\u00fcl\u00f6nbs\u00e9geket.\r\n *\/\r\n\r\n<\/pre>\n<h4>Stringek kis-nagybet\u0171s \u00e1talak\u00edt\u00e1sa &#8211; toLowerCase() \u00e9s toUpperCase()<\/h4>\n<p>A Stringeket egyszer\u0171en \u00e1talak\u00edthatunk csupa nagybet\u0171ss\u00e9, vagy kisbet\u0171ss\u00e9. Erre szolg\u00e1lnak az s.toUpperCase() \u00e9s s.toLowerCase() met\u00f3dusok.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString nev = &quot;Miko Csaba&quot;;\r\nSystem.out.println(nev.toUpperCase()); \/\/ &quot;MIKO CSABA&quot;\r\nSystem.out.println(nev.toLowerCase()); \/\/ &quot;miko csaba&quot;\r\n<\/pre>\n<h4>Keres\u00e9s Stringben &#8211; indexOf(), lastIndexOf()<\/h4>\n<p>Egyszer\u0171en kereshet\u00fcnk a Stringekben. K\u00edv\u00e1ncsiak vagyunk, hogy egy karakter vagy sz\u00f6vegr\u00e9szlet megtal\u00e1lhat\u00f3-e benne, s\u0151t arra is, hogy hol tal\u00e1lhat\u00f3. Erre szolg\u00e1l az s.indexOf() met\u00f3dus.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abrakadabra&quot;;\r\nSystem.out.println(s.indexOf(&quot;rak&quot;)); \/\/ 2\r\n\/\/  A 2. index\u0171 (3. karaktern\u00e9l) tal\u00e1lhat\u00f3 a rak sz\u00f3cska.\r\n\r\nSystem.out.println(s.indexOf(&quot;br&quot;)); \/\/ 1\r\n\/* Az 1. index\u0171 (2. karaktern\u00e9l) tal\u00e1lhat\u00f3 a br r\u00e9sz\r\n * Fontos, hogy az indexOf() mindig az els\u0151 tal\u00e1lat hely\u00e9t adja meg!\r\n *\/\r\n\r\nSystem.out.println(s.indexOf(&quot;Br&quot;)); \/\/ -1\r\n\/* Egy nem l\u00e9tez\u0151 indexet adott eredm\u00e9ny\u00fcl, vagyis a keresett\r\n * r\u00e9szlet nem tal\u00e1lhat\u00f3 meg a Stringben.\r\n *\/\r\n\r\nSystem.out.println(s.lastIndexOf(&quot;br&quot;)); \/\/ 8\r\n\/* A 8. index\u0171 (9. karaktern\u00e9l) tal\u00e1lhat\u00f3 a br r\u00e9sz, de most a\r\n * keres\u00e9st h\u00e1tulr\u00f3l kezdte, \u00e9s onnan adja vissza az els\u0151 tal\u00e1latot!\r\n *\/\r\n<\/pre>\n<p>Az indexOf() \u00e9s lastIndexOf() met\u00f3dusok alaphelyzetben mindig a String elej\u00e9r\u0151l\/v\u00e9g\u00e9r\u0151l kezdik a keres\u00e9st, de meg lehet adni nekik, hogy adott karaktert\u0151l kezdj\u00e9k: indexOf(mit, honnan) Ehhez kapcsol\u00f3d\u00f3 feladat lehet, hogy adjuk meg, hol tal\u00e1lhat\u00f3 a m\u00e1sodik &#8216;r&#8217; bet\u0171 a sz\u00f3ban:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s= &quot;abrakadabra&quot;;\r\nint elso = s.indexOf(&quot;r&quot;);\r\n\r\nSystem.out.println(s.indexOf(&quot;r&quot;, elso + 1));\r\n\/* El\u0151sz\u00f6r megkeress\u00fck az els\u0151 'r' bet\u0171t, majd amikor a m\u00e1sodikat\r\n * akarjuk megkeresni, akkor megadjuk, hogy az els\u0151 ut\u00e1ni poz\u00edci\u00f3t\u00f3l\r\n * induljunk. Ezt a k\u00e9t l\u00e9p\u00e9st ak\u00e1r \u00f6ssze is vonhatjuk:\r\n *\/\r\nSystem.out.println(s.indexOf(&quot;r&quot;, s.indexOf(&quot;r&quot;) + 1));\r\n\r\nSystem.out.println(s.lastIndexOf(&quot;br&quot;, s.lastIndexOf(&quot;br&quot;) - 1));\r\n\/* Ha ugyanezt h\u00e1tulr\u00f3l v\u00e9gezz\u00fck, akkor figyelni kell arra, hogy\r\n * az els\u0151 tal\u00e1lat el\u0151tt kell folytatni, vagyis itt -1\r\n * kell az els\u0151 tal\u00e1lat hely\u00e9hez k\u00e9pest, mivel visszafel\u00e9 keres\u00fcnk\r\n *\/\r\n\r\n\/* Fontos, hogy ha adott karaktert\u0151l kezdj\u00fck a keres\u00e9st a megadott r\u00e9szre\r\n * a tal\u00e1lat hely\u00e9t akkor is a String elej\u00e9t\u0151l adja a met\u00f3dus.\r\n *\/\r\nString s = \u201cabrakadabra\u201d;\r\nSystem.out.println(s.indexOf(\u201cbr\u201d, 5)); \/\/ 8\r\n\r\n<\/pre>\n<h4>String kezdete \u00e9s v\u00e9ge &#8211; startsWith(), endsWith()<\/h4>\n<p>Egyszer\u0171en megvizsg\u00e1lhatjuk, hogy a String egy adott karaktersorozattal kezd\u0151dik vagy v\u00e9gz\u0151dik. Erre szolg\u00e1lnak a startsWith() \u00e9s endsWith() met\u00f3dusok. Ezek is kis-nagybet\u0171 \u00e9rz\u00e9kenyek, vagyis megk\u00fcl\u00f6nb\u00f6ztetik \u0151ket.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abrakadabra&quot;;\r\nSystem.out.println(s.startsWith(&quot;ab&quot;)); \/\/ true\r\nSystem.out.println(s.endsWith(&quot;ab&quot;)); \/\/ false\r\nSystem.out.println(s.startsWith(&quot;Ab&quot;)); \/\/ false(!)\r\n<\/pre>\n<p>Hogy vehetem figyelmen k\u00edv\u00fcl a kis-nagybet\u0171 k\u00fcl\u00f6nbs\u00e9get? Nincs startsWithIgnoreCase() met\u00f3dus. A tr\u00fckk annyi, hogy a String kisbet\u0171s verzi\u00f3j\u00e1t kell \u00f6sszehasonl\u00edtani a keresett kezd\u0151r\u00e9sszel.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;Abrakadabra&quot;;\r\nSystem.out.println(s.startsWith(&quot;ab&quot;)); \/\/ false, nem meglep\u0151\r\nSystem.out.println(s.toLowerCase().startsWith(&quot;ab&quot;)); \/\/ true!\r\n<\/pre>\n<h4>String karaktereinek cser\u00e9je &#8211; replace(), replaceFirst()<\/h4>\n<p>Egy Stringben kicser\u00e9lhet\u00fcnk karaktereket. Erre szolg\u00e1l a replace() met\u00f3dus. Ezzel egy tetsz\u0151leges karakter minden el\u0151fordul\u00e1s\u00e1t kicser\u00e9lj\u00fck egy m\u00e1sikra. Az is el\u0151fordulhat, hogy csak az els\u0151t kell kicser\u00e9lni, erre szolg\u00e1l a replaceFirst().<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abrakadabra&quot;;\r\nSystem.out.println(s.replace(&quot;a&quot;,&quot;A&quot;)); \/\/ AbrAkAdAbrA\r\nSystem.out.println(s.replace(&quot;z&quot;,&quot;A&quot;)); \/\/ abrakadabra\r\n\/\/ Nem volt mit cser\u00e9lni, maradt az eredeti.\r\n\r\nSystem.out.println(s.replaceFirst(&quot;a&quot;,&quot;A&quot;)); \/\/ Abrakadabra\r\n\/\/ Kicser\u00e9lte az els\u0151t, ahogy v\u00e1rtuk.\r\n\r\ns = &quot;Abrakadabra&quot;;\r\nSystem.out.println(s.replaceFirst(&quot;a&quot;,&quot;A&quot;)); \/\/ AbrAkadabra(??)\r\n\/* L\u00e1thatod, hogy az eredeti sz\u00f3 m\u00e1r nagybet\u0171vel kezd\u0151d\u00f6tt. Ekkor az\r\n * els\u0151 bet\u0171, amit cser\u00e9lni tudott nyilv\u00e1n a m\u00e1sodik 'a' bet\u0171 lesz,\r\n * de itt sem felejtetted el: kis-nagybet\u0171 \u00e9rz\u00e9keny met\u00f3dus!\r\n *\/\r\n<\/pre>\n<h4>String r\u00e9sz\u00e9nek kinyer\u00e9se &#8211; substring()<\/h4>\n<p>El\u0151fordulhat, hogy egy Stringb\u0151l ki kell szedn\u00fcnk egy kisebb r\u00e9szletet. Erre szolg\u00e1l a substring() met\u00f3dus.<\/p>\n<p>Amikor egy r\u00e9szt akarunk kinyerni egy Stringb\u0151l, akkor meg kell mondanunk, hogy milyen karakter hat\u00e1rokhoz (indexek) viszony\u00edtva akarom ezt megkapni. Melyikt\u0151l kezdj\u00fck, \u00e9s melyik <strong>el\u0151tt<\/strong> fejezz\u00fck be. Ha csak a kezd\u0151 poz\u00edci\u00f3t adjuk meg, akkor onnant\u00f3l a String v\u00e9g\u00e9ig az eg\u00e9szet megkapjuk. A substring() mindig String t\u00edpus\u00fa eredm\u00e9nyt ad vissza.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abrakadabra&quot;;\r\nSystem.out.println(s.substring(0,5)); \/\/ abrak\r\nSystem.out.println(s.substring(2,5)); \/\/ rak\r\nSystem.out.println(s.substring(5,8)); \/\/ ada\r\nSystem.out.println(s.substring(6));   \/\/ dabra\r\nSystem.out.println(s.substring(s.length())); \/\/ mindig \u00fcres String\r\n<\/pre>\n<h4>A String tartalmazza-e? &#8211; contains()<\/h4>\n<p>Megtudhatjuk, hogy a String tartalmaz-e egy keresett r\u00e9szt a contains() met\u00f3dus seg\u00edts\u00e9g\u00e9vel. Ez minden esetben logikai eredm\u00e9nyt ad. True ha benne van, false ha nincs. Az utols\u00f3 tr\u00fckk meg m\u00e1r ismer\u0151s.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;Abrakadabra&quot;;\r\nSystem.out.println(s.contains(&quot;rak&quot;)); \/\/ true\r\nSystem.out.println(s.contains(&quot;Rak&quot;)); \/\/ false\r\nSystem.out.println(s.contains(&quot;abra&quot;)); \/\/ true (a vegen van!)\r\nSystem.out.println(s.contains(&quot;abrak&quot;)); \/\/ false\r\nSystem.out.println(s.toLowerCase().contains(&quot;abrak&quot;)); \/\/ true(!)\r\n<\/pre>\n<p>Egy\u00e9bk\u00e9nt a contains() kiv\u00e1lthat\u00f3 ak\u00e1r egy indexOf() met\u00f3dussal is, annyi a k\u00fcl\u00f6nbs\u00e9g, hogy az \u00f6nmag\u00e1ban nem logikai eredm\u00e9nyt ad:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;Abrakadabra&quot;;\r\nSystem.out.println(s.indexOf(&quot;rak&quot;) &gt; -1); \/\/ true\r\nSystem.out.println(s.indexOf(&quot;Rak&quot;) &gt; -1); \/\/ false\r\n<\/pre>\n<h4>String sz\u00e9tdarabol\u00e1sa &#8211; split()<\/h4>\n<p>T\u00f6bb feladat eset\u00e9n el\u0151fordulhat, hogy egy Stringet az\u00e9rt kell darabokra szedni, mert valamilyen elv\u00e1laszt\u00f3 karakterekkel hat\u00e1rolva t\u00f6bb adatot tartalmaznak. Erre a darabol\u00e1sra szolg\u00e1l a split() met\u00f3dus. A split() minden esetben egy String t\u00f6mb\u00f6t ad eredm\u00e9ny\u00fcl, melynek elemei a megadott karaktern\u00e9l sz\u00e9tt\u00f6rt String darabjai lesznek. L\u00e1thatod majd a p\u00e9ld\u00e1kb\u00f3l, hogy csak meg kell adni a split() met\u00f3dusnak, milyen karakter ment\u00e9n t\u00f6rje sz\u00e9t a Stringet. Az eredm\u00e9ny azonnal elt\u00e1rolhat\u00f3 egy String t\u00f6mbben.<\/p>\n<p>Az utols\u00f3 p\u00e9lda kicsit furcsa. Ne lepjen meg, hogy van benne egy \u00fcres String. Mivel a String elej\u00e9n volt egy t\u00f6r\u00e9spont, ez\u00e9rt a bevezet\u0151 &#8216;a&#8217; bet\u0171n\u00e9l is elt\u00f6ri a Stringet, \u00e9s az el\u0151tte l\u00e9v\u0151 semmit is elt\u00e1rolja egy \u00fcres String darabk\u00e9nt. Ha a t\u00f6r\u00e9spont a String v\u00e9g\u00e9n tal\u00e1lhat\u00f3, akkor azt nem veszi figyelembe, \u00e9s nincs nyoma az eredm\u00e9nyt\u00f6mbben sem. Alaphelyzetben a String v\u00e9g\u00e9n elhelyezked\u0151 t\u00f6r\u00e9spontokat a split() figyelmen k\u00edv\u00fcl hagyja. Legal\u00e1bbis ez a verzi\u00f3ja.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString nevsor = &quot;Geza Eva Pal&quot;;\r\nString&#x5B;] nevek = nevsor.split(&quot; &quot;); \/\/ { &quot;Geza&quot;, &quot;Eva&quot;, &quot;Pal&quot; }\r\n\r\nString nevsor2 = &quot;Geza,Eva,Pal&quot;;\r\nString&#x5B;] nevek2 = nevsor2.split(&quot;,&quot;); \/\/ { &quot;Geza&quot;, &quot;Eva&quot;, &quot;Pal&quot; }\r\n\r\nString s = &quot;abrakadabra&quot;;\r\nString&#x5B;] tomb = s.split(&quot;a&quot;); \/\/ { &quot;&quot;, &quot;br&quot;, &quot;k&quot;, &quot;d&quot;, &quot;br&quot; }\r\n<\/pre>\n<p>Nem csak egy karakter adhat\u00f3 meg t\u00f6r\u00e9spontk\u00e9nt, ak\u00e1r karaktersorozatot is haszn\u00e1lhatsz. Itt is igaz az, hogy el\u0151l l\u00e9v\u0151 t\u00f6r\u00e9spont miatt \u00fcres Stringgel kezd\u0151dik az eredm\u00e9nyt\u00f6mb, a v\u00e9g\u00e9n l\u00e9v\u0151vel itt sem foglalkozna, ha lenne \ud83d\ude42<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abrakadabra&quot;;\r\nString&#x5B;] tomb = s.split(&quot;ab&quot;); \/\/ { &quot;&quot;, &quot;rakad&quot;, &quot;ra&quot; }\r\n<\/pre>\n<p>A split() met\u00f3dus m\u00e1sik form\u00e1ja k\u00e9t param\u00e9tert v\u00e1r. Itt egy limitet lehet megadni, hogy h\u00e1ny elem\u0171 eredm\u00e9nyt\u00f6mb\u00f6t kapjak. A met\u00f3dus a k\u00f6vetkez\u0151:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">s.split(t\u00f6r\u00e9spont,n);<\/pre>\n<p>Itt t\u00f6bbf\u00e9le eredm\u00e9ny is lehet. Az n-nel jel\u00f6lt sz\u00e1m \u00e9rt\u00e9ke t\u00f6bbf\u00e9le lehet, ennek megfelel\u0151 a v\u00e9geredm\u00e9ny is.<\/p>\n<ol>\n<li>Ha n &gt; 0,akkor n val\u00f3j\u00e1ban azt jelenti, hogy h\u00e1ny darabra t\u00f6rje a Stringet. (vagyis n-1 esetben t\u00f6ri). Ha a k\u00edv\u00e1nt darabok sz\u00e1ma t\u00f6bb, mint amennyi lehets\u00e9ges, akkor a lehets\u00e9ges maximumot kapjuk. Az &#8220;abrakadabra&#8221; sz\u00f3t nem t\u00f6rhetem az &#8216;a&#8217; bet\u0171kn\u00e9l 100 r\u00e9szre. Mivel \u00f6sszesen 5 &#8216;a&#8217; bet\u0171 van benne, de ebb\u0151l egy a v\u00e9g\u00e9n, \u00edgy maximum 6 darabra t\u00f6rhet\u0151. \u00c9s ha az el\u0151z\u0151 sz\u00f3n\u00e1l 3 a limit? Akkor k\u00e9tszer t\u00f6ri el a sz\u00f3t az elej\u00e9t\u0151l kezdve, \u00e9s 3 darabunk lesz. Az utols\u00f3 darabban viszont benne marad az \u00f6sszes olyan t\u00f6r\u00e9spont, ameddig a limit miatt nem jutott el.<\/li>\n<li>Ha n == 0, az gyakorlatilag az alap split() met\u00f3dus eredm\u00e9ny\u00e9t hozza. Vagyis, a String elej\u00e9n l\u00e9v\u0151 t\u00f6r\u00e9spontokat figyeli, a v\u00e9g\u00e9n l\u00e9v\u0151ket nem, \u00e9s annyi darabra t\u00f6ri, amennyire ennek megfelel\u0151en lehets\u00e9ges.<\/li>\n<li>Ha n &lt; 0, akkor annyi darabra t\u00f6ri, amennyire csak tudja n \u00e9rt\u00e9k\u00e9t\u0151l f\u00fcggetlen\u00fcl. \u00c9s itt figyelembe veszi a String v\u00e9g\u00e9n l\u00e9v\u0151 t\u00f6r\u00e9spontokat is! Ilyenkor a darabok \u00e9s a t\u00f6r\u00e9spontok ismeret\u00e9ben b\u00e1rmikor helyre\u00e1ll\u00edthat\u00f3 az eredeti String!<\/li>\n<\/ol>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abrakadabra&quot;;\r\nString&#x5B;] tomb;\r\n\/\/ n &gt; 0\r\ntomb = s.split(&quot;a&quot;, 1); \/\/ { &quot;abrakadabra&quot; } 1 darab\r\ntomb = s.split(&quot;a&quot;, 3); \/\/ { &quot;&quot;, &quot;br&quot;, &quot;kadabra&quot; } 3 darab\r\ntomb = s.split(&quot;a&quot;, 5); \/\/ { &quot;&quot;, &quot;br&quot;, &quot;k&quot;, &quot;d&quot;, &quot;bra&quot; } 5 darab\r\ntomb = s.split(&quot;a&quot;, 8); \/\/ { &quot;&quot;, &quot;br&quot;, &quot;k&quot;, &quot;d&quot;, &quot;br&quot;, &quot;&quot; } 6 darab,\r\n                        \/\/ de nem 8, mert nincs annyi t\u00f6r\u00e9spont!\r\n\r\n\/\/ n == 0\r\ntomb = s.split(&quot;a&quot;, 0); \/\/ { &quot;&quot;, &quot;br&quot;, &quot;k&quot;, &quot;d&quot;, &quot;br&quot; } mint split(&quot;a&quot;)\r\n\r\n\/\/ n &lt; 0\r\ntomb = s.split(&quot;a&quot;, -1); \/\/ { &quot;&quot;, &quot;br&quot;, &quot;k&quot;, &quot;d&quot;, &quot;br&quot;, &quot;&quot; } h\u00e1ts\u00f3k is!\r\n<\/pre>\n<p><strong>Speci\u00e1lis hat\u00e1rol\u00f3k<\/strong><\/p>\n<p>Vannak olyan speci\u00e1lis karakterek, melyeket nem lehet csak \u00fagy odaadni a split-nek. Nem tudom, hogy a lista teljes-e, de ha valamelyik hat\u00e1rol\u00f3 eset\u00e9n a split nem j\u00f3 eredm\u00e9nyt ad, \u00e9rdemes majd az al\u00e1bb ismertetett m\u00f3don megpr\u00f3b\u00e1lni.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;abra.kad.abra&quot;;\r\nString&#x5B;] tomb;\r\ntomb = s.split(&quot;.&quot;); \/\/ hib\u00e1s!\r\ntomb = s.split(&quot;\\\\.&quot;); \/\/ { &quot;abra&quot;, &quot;kad&quot;, &quot;abra&quot; }\r\n\r\ns = &quot;abra|kad|abra&quot;;\r\ntomb = s.split(&quot;|&quot;); \/\/ hib\u00e1s!\r\ntomb = s.split(&quot;\\\\|&quot;); \/\/ { &quot;abra&quot;, &quot;kad&quot;, &quot;abra&quot; }\r\n\r\ns = &quot;abra\\\\kad\\\\abra&quot;; \/\/ m\u00e1r a megad\u00e1skor \u00fcgyelni kell a \\ jelre!\r\ntomb = s.split(&quot;\\&quot;); \/\/ hib\u00e1s!\r\ntomb = s.split(&quot;\\\\&quot;); \/\/ hib\u00e1s!!!\r\ntomb = s.split(&quot;\\\\\\\\&quot;); \/\/ { &quot;abra&quot;, &quot;kad&quot;, &quot;abra&quot; }\r\n<\/pre>\n<p>Az utols\u00f3 p\u00e9lda esetleg kis magyar\u00e1zatot ig\u00e9nyel. Itt hat\u00e1rol\u00f3 karakternek szeretn\u00e9nk megadni a \\ jelet. A splitnek ha \\\\ m\u00f3don adjuk meg a hat\u00e1rol\u00f3kat, azt sem dolgozza fel, mert \u0151 ezt egy \\ jelnek veszi. Itt a helyes megold\u00e1s a \\\\\\\\, amib\u0151l liter\u00e1lk\u00e9nt \\\\ marad, \u00e9s \u0151 ezt dolgozza fel \\ jelk\u00e9nt. Ha egy f\u00e1jlb\u00f3l beolvasott Stringben vannak ilyen jelek, akkor nem kell kiv\u00e9telk\u00e9nt megadni, teh\u00e1t a f\u00e1jlban el\u00e9g, ha \u00edgy szerepel:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">abra\\kad\\abra<\/pre>\n<p>Liter\u00e1lk\u00e9nt viszont a \\ jel \u00f6nmag\u00e1ban nem adhat\u00f3 meg, \u00edgy Stringk\u00e9nt megadva ebb\u0151l ez lesz:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\ns = &quot;abra\\\\kad\\\\abra&quot;;\r\n<\/pre>\n<p>Csak z\u00e1r\u00f3jelben jegyzem meg, hogy a split()-nek megadand\u00f3 t\u00f6r\u00e9spont nem csak String lehet, hanem egy \u00fagynevezett regul\u00e1ris kifejez\u00e9s is. Ez egy nagyon j\u00f3l param\u00e9terezhet\u0151 illeszt\u00e9si minta, amivel teljesen \u00e1tl\u00e1that\u00f3v\u00e1 tudunk tenni \u00f6sszetett mint\u00e1kat is.<\/p>\n<p><strong>T\u00f6bb hat\u00e1rol\u00f3 egy\u00fcttes haszn\u00e1lata<\/strong><\/p>\n<p>El\u0151fordulhat olyan feladat, amelyn\u00e9l egy adott Stringet \u00fagy kell t\u00f6bb darabra t\u00f6rni, hogy nem csak egyf\u00e9le hat\u00e1rol\u00f3t haszn\u00e1lunk. Nyilv\u00e1n meg lehetne oldani az eddig le\u00edrtak alapj\u00e1n is, de az meglehet\u0151sen k\u00f6r\u00fclm\u00e9nyes lenne. Tegy\u00fck fel adott egy String, ami \u00edgy n\u00e9z ki:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;123a4a56b78b9a0&quot;;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Ebben a sorban olyan Stringet l\u00e1tunk, ahol az egyes darabokat (a leend\u0151 s\u00e1zmokat) bet\u0171k v\u00e1lasztj\u00e1k el egym\u00e1st\u00f3l. A helyzet azonban az, hogy nem csak egyfajta bet\u0171 jelenik meg hat\u00e1rol\u00f3k\u00e9nt. Split-n\u00e9l eddig azt tanultuk, hogy meg kell adni azt a hat\u00e1rol\u00f3t, amin\u00e9l sz\u00e9t akarjuk t\u00f6rni a Stringet. A hat\u00e1rol\u00f3 \u00e1llhat t\u00f6bb karakterb\u0151l is, de ez akkor is csak egyetlen darab lesz. L\u00e1ssuk hogy lehet megoldani azt, hogy a fenti String-et a bet\u0171kn\u00e9l t\u00f6rdelve megkapjuk a benne l\u00e9v\u0151 sz\u00e1mokat:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;123a4a56b78b9a0&quot;;\r\nString&#x5B;] darabok = s.split(&quot;a|b|c&quot;);\r\n\r\nfor( int i = 0; i &lt; darabok.length; i++ )\r\n{\r\n  System.out.println(darabok&#x5B;i]);\r\n}\r\n<\/pre>\n<p>Ha lefuttatod a fenti k\u00f3dot, akkor l\u00e1thatod, hogy val\u00f3ban az \u00f6sszes sz\u00e1mot megkaptuk, \u00e9s egyetlen bet\u0171t sem tal\u00e1lunk a darabokban. Gyakorlatilag annyi a teend\u0151nk, hogy egy | jellel elv\u00e1lasztottuk egym\u00e1st\u00f3l a hat\u00e1rol\u00f3kat egy felsorol\u00e1sban. Ez a | jel val\u00f3j\u00e1ban egy <strong>vagy<\/strong> m\u0171veletnek, de ez nem a logikai vagy, ne keverj\u00fck vele, csak egyetlen jelb\u0151l \u00e1ll. Ha teh\u00e1t t\u00f6bb hat\u00e1rol\u00f3n\u00e1l kell egy Stringet darabolnunk, akkor haszn\u00e1ljuk b\u00e1tran. Egy j\u00f3 p\u00e9lda erre az emelt informatika \u00e9rett\u00e9s\u00e9gi feladatok feh\u00e9rje nev\u0171 feladata (2006 m\u00e1jus).<\/p>\n<h4>Stringet karakterekre bont\u00e1sa &#8211; toCharArray()<\/h4>\n<p>El\u0151fordulhat, hogy egy Stringet sz\u00e9t kell bontani karaktereire.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString s = &quot;hokusz&quot;;\r\nchar&#x5B;] tomb = s.toCharArray(); \/\/ { 'h', 'o', 'k', 'u', 's', 'z' }\r\n<\/pre>\n<h2>String feladatok<\/h2>\n<p>Akkor kombin\u00e1ljuk az eddig tanultakat, n\u00e9zz\u00fck meg a met\u00f3dusok haszn\u00e1lat\u00e1t komplexebb feladatok eset\u00e9n.<\/p>\n<p>\u00cdrjuk ki a nev\u00fcnket v\u00edzszintesen kicsit sz\u00e9th\u00fazva (tegy\u00fcnk a nev\u00fcnk bet\u0171i k\u00f6z\u00e9 plusz sz\u00f3k\u00f6z\u00f6ket):<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString nev = &quot;Miko Csaba&quot;;\r\nfor (int i = 0; i &lt; nev.length(); i++)\r\n{\r\n  System.out.print(nev.charAt(i) + &quot; &quot;);\r\n}\r\n<\/pre>\n<p>Adjuk meg a nev\u00fcnket, \u00edrjuk ki egy oszlopba:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString nev = &quot;Miko Csaba&quot;;\r\nfor( int i = 0; i &lt; nev.length(); i++ )\r\n{\r\n  System.out.println( nev.charAt(i) );\r\n}\r\n<\/pre>\n<p>Sz\u00e1moljuk meg, h\u00e1ny a bet\u0171 tal\u00e1lhat\u00f3 a nev\u00fcnkben:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString nev = &quot;Miko Csaba&quot;;\r\nint adb = 0;\r\nfor( int i = 0; i &lt; nev.length(); i++ )\r\n{\r\n  if( nev.charAt(i) == 'a' )\r\n  {\r\n    adb++;\r\n  }\r\n}\r\nSystem.out.println( &quot;A nevben &quot; + adb + &quot; darab 'a' betu talalhato.&quot; );\r\n<\/pre>\n<p>\u00cdrjuk ki, h\u00e1nyszor szerepel a mondatban &#8216;a&#8217; n\u00e9vel\u0151. Kis \u00e9s nagybet\u0171s v\u00e1ltozat is sz\u00e1m\u00edt!<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString nev = &quot;A Java tanulasa nem egyszeru feladat, &quot;\r\n  + &quot;de a szorgalom meghozza gyumolcset.&quot;;\r\nString&#x5B;] tomb = nev.toLowerCase().split(&quot; &quot;);\r\nint adb = 0;\r\nfor( int i = 0; i &lt; tomb.length; i++ )\r\n{\r\n  if( tomb&#x5B;i].equals(&quot;a&quot;) )\r\n  {\r\n    adb++;\r\n  }\r\n}\r\nSystem.out.println( &quot;A nevben &quot; + adb + &quot; darab 'a' nevelo talalhato.&quot; );\r\n<\/pre>\n<h4>K\u00f6vetkez\u0151 lecke: <a title=\"Java programoz\u00e1s 17. \u2013 Alap algoritmusok\" href=\"http:\/\/www.webotlet.hu\/?p=451\">Alap algoritmusok<\/a><\/h4>\n","protected":false},"excerpt":{"rendered":"<p>String, avagy minden, amit beg\u00e9pelhetsz (vagy nem) A Java programoz\u00e1si nyelvben, mint megtudhattad, t\u00f6bbf\u00e9le v\u00e1ltoz\u00f3t\u00edpus l\u00e9tezik. Ezek egy r\u00e9sze egyszer\u0171 (primit\u00edv) t\u00edpus, de vannak \u00f6sszetett, komplexebb t\u00edpusok, ezek minden esetben objektumok. Ezek egyike a karakterl\u00e1nc, m\u00e1s nev\u00e9n String. Mint a <a class=\"more-link\" href=\"https:\/\/www.webotlet.hu\/?p=619\">Tov\u00e1bb <span class=\"screen-reader-text\">  Java programoz\u00e1s 15. &#8211; String<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[99],"tags":[144,60,143,29],"class_list":["post-619","post","type-post","status-publish","format-standard","hentry","category-java-alap-leckek","tag-java_programozas","tag-karakterlanc","tag-programozas","tag-string"],"_links":{"self":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=619"}],"version-history":[{"count":77,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/619\/revisions"}],"predecessor-version":[{"id":3174,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/619\/revisions\/3174"}],"wp:attachment":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}