JavaRush /Java Blog /Random-TK /Java-da bölmek usuly: setiri böleklere bölüň

Java-da bölmek usuly: setiri böleklere bölüň

Toparda çap edildi
String bölmek usuly barada gürleşeliň : näme edýär we näme üçin zerur. Setiri bölýändigini çaklamak aňsat, ýöne iş ýüzünde nähili işleýär? Usulyň işleýşine has içgin seredeliň we käbir düşnüksiz jikme-jiklikleri ara alyp maslahatlaşalyň we şol bir wagtyň özünde String synpynda näçe bölüniş usulynyň bardygyny anyklalyň. Gideli!

Java String.split üçin kesgitleme we gol

Java-da bölmek usuly, yzygiderli aňlatma bilen kesgitlenýän delimiter ulanyp, setiri substrlere bölýär. Usula gol bereliň we suwa çümüp başlalyň:
String[] split(String regex)
Goldan iki zat düşnüklidir:
  1. Usul setirleriň bir toparyny gaýtaryp berýär.
  2. Usul parametr hökmünde regex setirini alýar.
Aboveokarda berlen kesgitleme nukdaýnazaryndan her bir zada aýratyn seredeliň.
  1. Usul setirleriň bir toparyny gaýtaryp berýär.

    Kesgitleme aşakdaky sözleri öz içine alýar: " Java-da bölmek usuly bir setiri aşaky böleklere bölýär." Bu aşaky bölekler usul bilen bir massiwde ýygnalyp, onuň yzyna gaýtaryş bahasyny görkezýär.

  2. Usul parametr hökmünde regex setirini alýar.

    Againene-de kesgitlemäni ýadyňyzdan çykarmaň: “yzygiderli aňlatma bilen kesgitlenýän delimiter ulanyp, setiri substrlere bölýär.” Kabul edilen regex parametri, çeşme setirine ulanylýan we çeşme setirindäki bölüji nyşan (ýa-da nyşanlaryň utgaşmasy) bilen gabat gelýän yzygiderli aňlatma nagşydyr.

Java-da bölmek usuly: setiri böleklere bölüň - 1

Iş ýüzünde bölüň

Indi işe gireliň. Sözler bilen setirimiziň bardygyny göz öňüne getireliň. Mysal üçin, şuňa meňzeş:
Men Java-y gowy görýärin
Setiri sözlere bölmeli. Bu setirde sözleriň biri-birinden boşluklar bilen bölünýändigini görýäris. Kosmos bu ýagdaýda bölüji rol üçin ideal kandidat. Bu meseläni çözmegiň kody şu:
public class Main {
    public static void main(String[] args) {
        String str = "I love Java";
        String[] words = str.split(" ");
        for (String word : words) {
            System.out.println(word);
        }
    }
}
Esasy usulyň netijesi aşakdaky setirler bolar:
Men Java-y gowy görýärin
Bölünmek usulynyň nähili işlejekdigine ýene birnäçe mysallara seredeliň :
Setir Aýyrmak Usulyň netijesi
"Men Java-y gowy görýärin" "" (kosmos nyşany) { "Men" , "söýgi" , "Java" }
"192.168.0.1:8080" ":" { "192.168.0.1" , "8080" }
"Gyzyl, mämişi, sary" "," { "Gyzyl" , "mämişi" , "sary" }
"Gyzyl, mämişi, sary" "," { "Gyzyl" , "mämişi" , "sary" }
Aboveokardaky tablisadaky soňky iki hataryň arasyndaky tapawutlara üns beriň. Ahyrky setirde, bölüji çekimlidir, şonuň üçin setir käbir sözleriň öňdebaryjy ýerlerine bölünýär. Iň soňky setirde aralyk we kosmos nyşanyny aýyrdyk. Şonuň üçin emele gelen massiwde öňdebaryjy boşluklar bolan çyzyklar ýokdy. Bu dogry bölüjini üns bilen saýlamagyň möhümdigini görkezýän kiçijik jikme-jiklik.

Öňdebaryjy delimiter

Moreene bir möhüm nuans bar. Çeşme setiri aýyrmak bilen başlasa, emele gelen massiwiň birinji elementi boş setir bolar. Mysal üçin : _ _ _ _ _ _ _ _ _ _ başlamaz, netijesi başgaça bolar: Çeşme setiri: "Java-ny halaýaryn" Aýralykçy: "" Netijeler massiw: { "I" , "söýýärin" , "Java" } Geliň, bölmek usulynyň üýtgeýişlerinde koda seredeliň Çeşmäniň ahyrynda we / ýa-da başynda bölüji nyşan bilen:
public class Main {
    public static void main(String[] args) {
        print("I love Java".split(" "));
        print(" I love Java".split(" "));
        print("I love Java ".split(" "));
        print(" I love Java ".split(" "));
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}
Esasy usulyň çykyşy şeýle bolar:
[Men, söýýärin, Java] [, men, söýýärin, Java] [I, love, Java] [, I, love, Java]
Çeşme setirindäki birinji simwolyň kesgitleýji nyşan bolanda, netijede görkezilen massiwiň birinji elementi hökmünde boş setiriň boljakdygyny ýadyňyzdan çykarmaň.

Artykmaç ýoldaş

Setir synpynda bu gol bilen başga bir bölüniş usuly bar :
String[] split(String regex, int limit)
Bu usulyň goşmaça çäk parametri bar: regex nagşynyň çeşme setirine näçe gezek ulanyljakdygyny kesgitleýär. Aşakda düşündirişler:

limit> 0

çäk -1 gezek ulanylýar . Bu ýagdaýda, massiwiň uzynlygy çäk bahasyndan geçmez . Toplumyň soňky elementi, tapylan iň soňky delimiterden soň setiriň bölegi bolar. Mysal:
public class Main {
    public static void main(String[] args) {
        print("I love Java".split(" ", 1));
        print("I love Java".split(" ", 2));
        /*
         Output:
         [I love Java]
         [I, love Java]
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}

çäk <0

Aýyrmak gözleg nagşy mümkin boldugyça köp gezek ulanylýar. Alnan massiwiň uzynlygy islendik bolup biler. Mysal:
public class Main {
    public static void main(String[] args) {
        // Notice the space at the end of the line
        print("I love Java ".split(" ", -1));
        print("I love Java ".split(" ", -2));
        print("I love Java ".split(" ", -12));
        /*
         Output:
        [I, love, Java, ]
        [I, love, Java, ]
        [I, love, Java, ]

        Note that the last element of the array is
        an empty string, resulting from the space
        at the end of the original string.
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}

çäk 0

<0 çäkde bolşy ýaly , delimiter nagşy setirde mümkin boldugyça köp ulanylýar. Alnan massiw islendik uzynlykda bolup biler. Soňky elementler boş setir bilen deň bolsa, soňky massiwde taşlanar. Mysal:
public class Main {
    public static void main(String[] args) {
        // Notice the space at the end of the line
        print("I love Java ".split(" ", 0));
        print("I love Java ".split(" ", 0));
        print("I love Java ".split(" ", 0));
        /*
         Output:
        [I, love, Java]
        [I, love, Java]
        [I, love, Java]
        Note the absence of empty strings at the end of the arrays
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}
Bölüniş usulynyň ýerine ýetirilişine bir argument bilen seretsek , bu usulyň aşa ýüklenen doganyny ikinji argument bilen atlandyrýandygyny görýäris:
public String[] split(String regex) {
    return split(regex, 0);
}

Dürli mysallar

Iş tejribesinde käwagt käbir düzgünlere laýyklykda düzülen setirimiz bolýar. Bu setir biziň programmamyza islendik ýerden “gelip biler”:
  • üçünji tarap hyzmatyndan;
  • haýyşymyzdan serwerimize;
  • konfigurasiýa faýlyndan;
  • we ş.m.
Adatça şeýle ýagdaýda programmist “oýnuň düzgünlerini” bilýär. Programmaçy, bu nagyş boýunça saklanýan ulanyjy hakda maglumatlarynyň bardygyny bilýär diýeliň:
ulanyjy_id | ulanyjy_login | ulanyjy_ poçta
Mysal üçin, aýratyn gymmatlyklary alalyň:
135|bender|bender@gmail.com
Indi programmist ulanyja e-poçta iberýän usul ýazmak meselesi bilen ýüzbe-ýüz bolýar. Onuň ygtyýarynda ýokardaky formatda ýazylan ulanyjy hakda maglumatlar bar. Derňewimizi dowam etdirjek subtask, e-poçta salgysyny ulanyjy hakda umumy maglumatlardan izolirlemekdir. Bu bölmek usulynyň peýdaly bolup biljek bir mysaly . Galyberse-de, şablona seretsek, ulanyjynyň e-poçta salgysyny ähli maglumatlardan çykarmak üçin diňe bölmek usuly bilen setiri bölmelidigimize düşünýäris . Soňra e-poçta salgysy emele gelen massiwiň soňky elementinde bolar. Ulanyjy hakda maglumatlary öz içine alýan we ulanyjynyň e-poçta salgysyny yzyna gaýtaryp berýän şeýle usula mysal bereliň. Simplönekeýleşdirmek üçin, bu setiriň hemişe zerur formata laýyk gelýändigini kabul edeliň:
public class Main {
    public static void main(String[] args) {
        String userInfo = "135|bender|bender@gmail.com";
        System.out.println(getUserEmail(userInfo));
        // Output: bender@gmail.com
    }

    static String getUserEmail(String userInfo) {
        String[] data = userInfo.split("\\|");
        return data[2]; // or data[data.length - 1]
    }
}
Aýyryjyna üns beriň: "\\ |" . Sebäbi yzygiderli “|” - bu belli bir logika bagly bolan aýratyn bir nyşan; ony adaty (çeşme setirinde tapmak isleýän) hökmünde ulanmak üçin iki arkadan peýdalanyp, bu simwoldan gaçmalydyrys. Başga bir meselä seredeliň. Takmynan şu formatda ýazylan sargyt hakda maglumatymyz bar diýeliň:
element_number_1, element_name_1, element_ baha_1; element_number_2, element_name_2, element_ baha_2; ...; element_number_n, element_name_n, element_price_n
Specifica-da belli bir gymmatlyklary alalyň:
1, hyýar, 20.05; 2, pomidor, 123.45; 3, towşan, 0.50
Sargytyň umumy bahasyny hasaplamak meselesi bilen ýüzbe-ýüz bolýarys. Bu ýerde bölmek usulyny birnäçe gezek ulanmaly bolarys . Birinji ädim, setiri ";" nyşany arkaly komponent böleklerine bölmekdir. Soňra şeýle bölümleriň hersinde geljekde gaýtadan işläp boljak aýratyn önüm hakda maglumat alarys. Soň bolsa, her önümiň içinde maglumatlary "," nyşany bilen aýyrarys we emele gelen massiwden belli bir indeks (bahasy saklanýan) elementi alarys, ony san görnüşine öwreris we ahyrky çykdajylary jemläris. buýrugy. Bularyň hemmesini hasaplaýan usul ýazalyň:
public class Main {
    public static void main(String[] args) {
        String orderInfo = "1, cucumbers, 20.05; 2, tomatoes, 123.45; 3, hares, 0.50";
        System.out.println(getTotalOrderAmount(orderInfo));
        // Output: 144.0
    }

    static double getTotalOrderAmount(String orderInfo) {
        double totalAmount = 0d;
        final String[] items = orderInfo.split(";");

        for (String item : items) {
            final String[] itemInfo = item.split(",");
            totalAmount += Double.parseDouble(itemInfo[2]);
        }

        return totalAmount;
    }
}
Bu usulyň nähili işleýändigini özüňiz anyklamaga synanyşyň. Bu mysallara esaslanyp, bölüniş usulynyň setir görnüşinde käbir maglumatlary alanymyzda ulanylýandygyny aýdyp bileris , ondan has anyk maglumatlary çykarmaly bolarys.

Netijeler

String synpynyň bölüniş usulyna göz aýladyk . Simörite delimiter ulanyp, setiri bölek böleklerine bölmek zerur. Usul setirleriň bir toparyny (setiriň bölekleri) gaýtaryp berýär. Aýyrýan nyşanlary tapýan yzygiderli aňlatmany kabul edýär. Bu usulyň dürli inçeliklerine göz aýladyk:
  • öňdebaryjy delimiter häsiýeti;
  • iki argument bilen aşa ýüklenen dogan.
Şeýle hem , toslama, ýöne gaty real meseleleri çözmek üçin bölmek usulyny ulanan käbir “hakyky durmuş” ýagdaýlaryny deňeşdirmäge synanyşdyk .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION