JavaRush /Блоги Java /Random-TG /Усули тақсимкунӣ дар Java: сатрро ба қисмҳо тақсим кунед

Усули тақсимкунӣ дар Java: сатрро ба қисмҳо тақсим кунед

Дар гурӯҳ нашр шудааст
Биёед дар бораи усули тақсимкунии String сӯҳбат кунем : он чӣ кор мекунад ва чаро он лозим аст. Тахмин кардан осон аст, ки он сатрро тақсим мекунад, аммо он дар амал чӣ гуна кор мекунад? Биёед, бодиққат дида бароем, ки ин усул чӣ гуна кор мекунад ва баъзе ҷузъиёти норавшанро муҳокима кунем ва ҳамзамон бифаҳмем, ки воқеан дар синфи String чанд усулҳои тақсимкунӣ мавҷуданд. Рафтем!

Таъриф ва имзо барои Java String.split

Усули тақсимкунӣ дар Java як сатрро ба зерсатрҳо бо истифода аз ҷудокунанда, ки бо истифода аз ифодаи муқаррарӣ муайян шудааст, тақсим мекунад. Биёед ба усул имзо гузорем ва ба ғаввосии худ шурӯъ кунем:
String[] split(String regex)
Аз имзо ду чиз равшан аст:
  1. Ин усул массиви сатрҳоро бармегардонад.
  2. Усул ҳамчун параметр сатри регексро мегирад.
Биёед ҳар як чизро аз рӯи таърифи дар боло овардашуда алоҳида дида бароем.
  1. Ин усул массиви сатрҳоро бармегардонад.

    Таъриф калимаҳои зеринро дар бар мегирад: " Усули тақсимкунӣ дар Java сатрро ба зерсатрҳо тақсим мекунад." Ин зерсатрҳо аз рӯи усул ба массив ҷамъ оварда мешаванд ва арзиши баргардонидани онро ифода мекунанд.

  2. Усул ҳамчун параметр сатри регексро мегирад.

    Боз таърифро ба ёд оред: "сатрро ба зерсатрҳо бо истифода аз ҷудокунанда, ки бо истифода аз ифодаи муқаррарӣ муайян шудааст, тақсим мекунад." Параметри қабулшудаи regex намунаи ифодаи муқаррарӣ мебошад, ки ба сатри манбаъ татбиқ карда мешавад ва ба аломати ҷудокунанда (ё маҷмӯи аломатҳо) дар сатри манбаъ мувофиқат мекунад.

Усули тақсим дар Java: сатрро ба қисмҳо тақсим кунед - 1

Дар амал тақсим кардан

Акнун биёед ба кор равем. Биёед тасаввур кунем, ки мо як сатр бо калимаҳо дорем. Масалан, ба ин монанд:
Ман Java-ро дӯст медорам
Мо бояд сатрро ба калимаҳо шикастем. Мо мебинем, ки дар ин сатр вожањо аз њамдигар бо фосила људо шудаанд. Фазо як номзади беҳтарин барои нақши ҷудокунанда дар ин ҳолат аст. Рамзи ҳалли ин мушкилот чунин аст:
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);
        }
    }
}
Натиҷаи усули асосӣ сатрҳои зерин хоҳад буд:
Ман Java-ро дӯст медорам
Биёед ба чанд мисоли бештар назар кунем, ки чӣ тавр усули тақсимкунӣ кор мекунад :
Хат Маҳдудкунанда Натиҷаи усул
"Ман Java-ро дӯст медорам" " " (аломати фосила) { "Ман" , "муҳаббат" , "Java" }
"192.168.0.1:8080" ":" { "192.168.0.1" , "8080" }
"Сурх, норанҷӣ, зард" "," { "Сурх" , "норанҷӣ" , "зард" }
"Сурх, норанҷӣ, зард" ", " { "Сурх" , "норанҷӣ" , "зард" }
Ба фарқиятҳои байни ду сатри охирини ҷадвали боло аҳамият диҳед. Дар сатри пеш аз охир ҷудокунанда вергул аст, бинобар ин сатр ба тарзе тақсим мешавад, ки баъзе калимаҳо фосилаҳои пешбар доранд. Дар сатри охирин мо вергул ва аломати фосиларо ҳамчун ҷудокунанда истифода кардем. Аз ин рӯ, массиви натиҷавӣ ягон сатр бо фосилаҳои пешбаранда надошт. Ин танҳо як ҷузъиёти хурд аст, ки нишон медиҳад, ки бодиққат интихоб кардани ҷудокунандаи дуруст то чӣ андоза муҳим аст.

Маҳдудкунандаи пешбар

Боз як нозукии муҳим вуҷуд дорад. Агар сатри манбаъ бо ҷудокунанда оғоз шавад, элементи аввалини массиви натиҷавӣ сатри холӣ хоҳад буд. Дар мисол, он чунин хоҳад буд: Сатри манбаъ: "Ман Java-ро дӯст медорам" Маҳдудкунанда: " " Массиви натиҷавӣ: { "" , "I" , "love" , "Java" } Аммо агар сатри манбаъ бо ҷудокунанда тамом шавад ва сар накунад, натиҷа дигар мешавад: Сатри манбаъ: "I love Java" Ҷудокунанда: " " Массиви натиҷавӣ: { "I" , "love" , "Java" } Биёед codeро дар вариантҳои усули тақсимкунӣ бубинем бо аломати ҷудокунанда дар охири ва/ё ибтидои сатри манбаъ:
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));
    }
}
Натиҷаи усули асосӣ чунин хоҳад буд:
[Ман, дӯст, Java] [, ман, дӯст, Java] [ман, дӯст, Java] [, ман, дӯст, Java]
Бори дигар қайд кунед, ки вақте ки аломати аввал дар сатри манбаъ аломати ҷудокунанда аст, массиви натиҷавӣ сатри холӣ ҳамчун унсури аввалини он хоҳад буд.

Ҳамсафари аз ҳад зиёд

Синфи String бо ин имзо усули дигари тақсимкунӣ дорад:
String[] split(String regex, int limit)
Ин усул дорои параметри иловагии маҳдуд аст : он миқдори маротибаи истифодаи намунаи regex ба сатри манбаъро муайян мекунад. Дар зер шарҳҳо мавҷуданд:

маҳдудият > 0

маҳдудият -1 маротиба татбиқ карда мешавад . Дар ин ҳолат, дарозии массив аз арзиши маҳдуд зиёд нахоҳад буд . Унсури охирини массив қисми сатри пас аз ҷудокунандаи охирини ёфтшуда хоҳад буд. Мисол:
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));
    }
}

маҳдудият < 0

Намунаи ҷустуҷӯи ҷудокунанда ба сатр то ҳадди имкон истифода мешавад. Дарозии массиви натиҷавӣ метавонад ҳама гуна бошад. Мисол:
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));
    }
}

маҳдудият 0

Мисли маҳдудияти < 0, намунаи ҷудокунанда ба сатр то ҳадди имкон истифода мешавад. Массиви натиҷавӣ метавонад дарозии дилхоҳ дошта бошад. Агар унсурҳои охирин ба сатри холӣ баробар бошанд, онҳо дар массиви ниҳоӣ партофта мешаванд. Мисол:
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));
    }
}
Агар мо ба татбиқи усули тақсимкунӣ бо як аргумент назар андозем, мебинем, ки ин усул бародари изофабори худро бо далели дуюми сифр даъват мекунад:
public String[] split(String regex) {
    return split(regex, 0);
}

Мисолҳои гуногун

Дар амалияи кор баъзан чунин ходисахо руй медиханд, ки мо хатти аз руи коидахои муайян тартиб додашударо дорем. Ин сатр метавонад аз ҳар ҷо ба барномаи мо "дарояд":
  • аз хидмати тарафи сеюм;
  • аз дархост ба serverи мо;
  • аз файли конфигуратсия;
  • ва гайра.
Одатан дар чунин вазъият барномасоз «қоидаҳои бозӣ»-ро медонад. Фарз мекунем, ки барномасоз медонад, ки вай дар бораи корбар маълумот дорад, ки тибқи ин намуна нигоҳ дошта мешавад:
user_id|user_login|user_email
Масалан, биёед арзишҳои мушаххасро гирем:
135|бендер|bender@gmail.com
Ва ҳоло барномасоз бо вазифаи навиштани усуле рӯ ба рӯ мешавад, ки ба корбар паёми электронӣ мефиристад. Дар ихтиёри ӯ маълумот дар бораи корбар мавҷуд аст, ки дар формати боло сабт шудааст. Хуб, зервазифае, ки мо таҳлилро идома медиҳем, ҷудо кардани суроғаи почтаи электронӣ аз маълумоти умумӣ дар бораи корбар аст. Ин як мисолест, ки усули тақсимкунӣ метавонад муфид бошад. Дар ниҳоят, агар мо ба қолаб нигарем, мо мефаҳмем, ки барои гирифтани суроғаи почтаи электронии корбар аз ҳама маълумот, мо бояд танҳо хатро бо истифода аз усули тақсим тақсим кунем . Пас суроғаи почтаи электронӣ дар элементи охирини массиви натиҷавӣ хоҳад буд. Мисоли чунин усулро меорем, ки сатри дорои маълумот дар бораи корбарро мегирад ва почтаи электронии корбарро бармегардонад. Барои содда кардан, биёед фарз кунем, ки ин сатр ҳамеша ба формати лозимии мо мувофиқат мекунад:
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]
    }
}
Ба ҷудокунанда таваҷҷӯҳ кунед: "\\|" . Азбаски дар ибораҳои муқаррарии "|" - ин аломати махсусест, ки мантиқи муайян ба он баста шудааст; Барои он ки онро ҳамчун аломати муқаррарӣ истифода барем (онеро, ки мо мехоҳем дар сатри манбаъ пайдо кунем), мо бояд аз ин аломат бо истифода аз ду хатти баръакс раҳо кунем. Биёед мисоли дигарро дида бароем. Фарз мекунем, ки мо дар бораи фармоиш маълумот дорем, ки тақрибан дар ин формат навишта шудааст:
адад_рақами_1,номи_арзиши_1,нархи_1;рақами_2,номи_2,нархи_2;...;рақами_мод,номи_мод,
Ё биёед арзишҳои мушаххасро гирем:
1, бодиринг, 20,05; 2, помидор, 123,45; 3, харгӯш, 0,50
Дар назди мо вазифаи хисоб кардани арзиши умумии заказ меистад. Дар ин ҷо мо бояд якчанд маротиба усули тақсимкуниро истифода барем. Қадами аввал ин тақсим кардани сатр тавассути аломати ";" ба қисмҳои таркибии он мебошад. Он гоҳ дар ҳар як чунин қисм мо дар бораи маҳсулоти инфиродӣ маълумот дорем, ки мо метавонем онро дар оянда коркард кунем. Ва он гоҳ, дар дохor ҳар як маҳсулот, мо маълумотро бо истифода аз аломати "," ҷудо мекунем ва аз массив элементеро бо индекси муайян (ки дар он нарх нигоҳ дошта мешавад) мегирем, онро ба шакли ададӣ табдил медиҳем ва арзиши ниҳоиро тартиб медиҳем. аз фармон. Биёед усулеро нависем, ки ҳамаи инро ҳисоб мекунад:
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;
    }
}
Кӯшиш кунед, ки худатон бифаҳмед, ки ин усул чӣ гуна кор мекунад. Дар асоси ин мисолҳо, мо метавонем бигӯем, ки усули тақсимкунӣ вақте истифода мешавад, ки мо баъзе маълумотро дар шакли сатр дорем, ки мо бояд аз он маълумоти мушаххастарро гирем.

Натиҷаҳо

Мо ба усули тақсимкунии синфи String назар кардем . Барои тақсим кардани сатр ба қисмҳои таркибии он бо истифода аз ҷудокунаки махсус лозим аст. Усул массиви сатрҳоро бармегардонад (қисмҳои сатр). Ифодаи муқаррариро қабул мекунад, ки аломат(ҳо)-ро пайдо мекунад. Мо нозукиҳои гуногуни ин усулро дида баромадем:
  • аломати ҷудокунанда;
  • бародари изофабор бо ду далел.
Мо инчунин кӯшиш кардем, ки баъзе ҳолатҳои "ҳаёти воқеӣ" -ро тақлид кунем, ки дар он мо усули тақсимкуниро барои ҳалли мушкилоти афсонавӣ, вале воқеӣ истифода бурдем.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION