Разумевање подстринга у Јави: Основни водич

У овом чланку ћемо вам помоћи да разумете подстрингове у Јави. Не само да ћемо вам дати теоријско објашњење, већ ћемо вам дати и стварне примере кода који ће вам помоћи да визуализујете. Научићемо вас како да креирате подстрингове и помоћи ћемо вам да пронађете подстрингове унутар низа.

Али пре него што их научимо, морамо имати основе подстрингова.

Шта су низови и поднизови?

У контексту Јаве, стринг представља низ знакова. Сваки стринг у Јави је објекат. Низ у Јави може да садржи знакове, симболе, па чак и размак. С друге стране, подниз у Јави је део или подскуп Јава стринга.

На пример, „Геек“ је подниз „вдзвдз“. Поднизови вам помажу да добијете одређени део стринга.

Ако имате име „Јохн Дое“ и желите само име „Јохн“, лако га можете добити са подстринговима. Штавише, с обзиром да имате листу имена „Јохн, Јацк, Јолли“ и желите да сазнате да ли је „Јохн“ на њој, можете то учинити и са подстринговима. Ово су само обични примери. Можемо да користимо поднизове у различитим операцијама када их разумемо.

Пошто смо сада свесни концепта подстрингова у Јави, хајде да сада упознамо како да креирамо и радимо са подстринговима у Јави.

#1. Коришћење методе ‘субстринг()’

Метода ‘субстринг()’ нам омогућава да врло лако креирамо подстрингове. Узима до два параметра као улаз – стартИндек или оба стартИндек и ендИндек и враћа нам подстринг који желимо.

У зависности од броја параметара, можемо га користити на два начина. Сада, хајде да научимо о њима детаљно.

подстринг (инт стартИндек)

За почетак, можемо користити методу у облику ‘субстринг(стартИндек)’. Овде овај метод узима целобројну вредност као улаз, где је улаз почетна позиција подниза. Враћа стринг почевши од датог почетног индекса до краја оригиналног стринга.

Као пример, погледајмо следећи код:

public class Substrings{    
    public static void main(String args[]){    
    String str="techblog.co.rs";    
    System.out.println("Given String: " + str);  
    System.out.println("Substring: " +str.substring(4)); //index of strings start from 0
    }  
   }

ИЗЛАЗ:

Given String: techblog.co.rs
Substring: Flare

Из излаза видимо да је улазни низ „вдзвдз“, а повратна вредност је подниз „Фларе“. Прави подниз од датог индекса (4), односно од позиције 5 до краја низа.

подстринг(инт стартИндек, инт ендИндек)

Ово је још један начин да се користи метод подстринга класе Стринг. Методу подстринга можемо пренети два цела броја. Почетни индекс и завршни индекс. Да бисмо ово користили, морамо да користимо метод у формату ‘субстринг(стартИндек,ендИндек)’.

Да бисмо то боље разумели, погледајмо неки пример кода:

public class Substrings{    
    public static void main(String args[]){    
    String str="GeekFlareFans";    
    System.out.println("Given String: " + str);  
    System.out.println("Substring: " +str.substring(4,9));  //You get a substring starting from index no. 4 to index 8.

    }  
   }

ИЗЛАЗ:

Given String: GeekFlareFans
Substring: Flare

Као што видимо, с обзиром на стринг „ГеекФлареФанс“, он даје подниз „Фларе“. Дали смо почетни индекс 4 и крајњи индекс 9. Почиње од елемента са индексом 4 и завршава се пре 9. Морамо напоменути да не штампа елемент са индексом краја. Даје нам подстринг који укључује све елементе до крајњег индекса, али искључује елемент са индексом краја.

  Коју футролу за иПхоне 15 да купите?

#2. Коришћење методе ‘сплит()’

‘сплит()’ је још један метод класе Стринг у Јави који нам помаже да креирамо подстринг. Корисно је када се више информација чува унутар једног низа са заједничким знаком за раздвајање.

Синтакса помиње термин „регек“ који вам може изгледати помало застрашујући, па хајде да разумемо шта је регек пре него што наставимо. Регек је кратки термин за „регуларне изразе“. Редовни израз је низ знакова који описује образац унутар стринга или текста. У контексту сплит методе, редовни израз је наш сепаратор.

Метода ‘сплит()’ може узети до две променљиве као улаз, оне су низ регуларних израза и ограничени цео број. Регуларни израз је сепаратор, који, када се пронађе, доводи до цепања оригиналног стринга на 2 дела – део пре редовног израза и део после редовног израза.

На пример, претпоставимо да покушавате да поделите стринг „абцдеф“ са „бцд“ као регуларни израз. Добили бисмо поднизове „а“ и „еф“ као резултат.

Метод враћа низ са раздвојеним стринговима. Можемо да наведемо само регуларни израз или и регуларни израз и ограничење. Хајде да се упознамо са више начина позивања овог метода један по један.

сплит (регекс низа)

Први метод прима само низ регуларних израза у формату ‘сплит(регек)’. Нема граничну променљиву; стога враћа све одвојене подстрингове у низу.

Хајде да добијемо јасно разумевање са неким кодом:

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare";
    String[] substrings=str.split("%");
    System.out.println("Given String: " + str);
    System.out.println("First Substring: " + substrings[0]);
    System.out.println("Second Substring: " + substrings[1]);
     
    }  
}

ИЗЛАЗ:

Given String: Geek%Flare
First Substring: Geek
Second Substring: Flare

Као што видимо из кода, дати стринг има редовни израз за раздвајање „%“. Не мора да буде један знак, може бити било који низ са било којим бројем знакова. Метода ‘сплит()’ игнорише овај регуларни израз и даје нам све стрингове које је овај регуларни израз раздвојио. Поднизови се чувају унутар низа.

У коду, дати стринг је „Геек%Фларе“. Дакле, добијамо низ са два елемента у њему, а то су „Геек” и „Фларе”. Касније смо им приступили са њиховим индексима, који су 0,1 респективно, и одштампали смо „Геек“ и „Фларе“ на конзоли.

Овде такође треба да приметимо да ако се методи не проследе никакви параметри, он ће једноставно избацити грешку. Али ако дамо празан стринг (“”) као регуларни израз, добићемо сваки појединачни знак као подниз. Погледајмо пример да визуализујемо.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare";
    String[] substrings=str.split("");
    System.out.println(Arrays.toString(substrings));
     
    }  
}

ИЗЛАЗ:

[G, e, e, k, %, F, l, a, r, e]

Из примера је очигледно да је параметар регуларног израза празан стринг, он враћа све знакове као засебне подстрингове, и то можемо јасно видети штампањем излазног низа методе ‘сплит()’.

сплит (редовни израз низа, ограничење инт)

Са другом варијантом ове методе добијамо већу контролу над излазом и можемо даље фино подесити излаз методе ‘сплит()’. Овде метода ‘сплит()’ узима две променљиве као улаз. У овом случају, заједно са редовним изразом, дајемо и лимит параметар у наведеном формату ‘сплит(регек, лимит)’.

  8 сјајних Мате тема за преузимање

‘Лимит’ је број резултујућих стрингова који се излазе. У зависности од вредности лимита, могу постојати три могућности:

Случај 1: Ако је лимит>0, резултујући низ би садржао излаз, али би применио подељено (ограничење-1) највише пута. Овде, резултујући низ не би садржао више елемената од наведеног ограничења, а сав преостали низ који није подељен би био сачуван као што је био. Хајде да олакшамо разумевање помоћу неког кода.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%the%best";
    String[] substrings=str.split("%",2);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

ИЗЛАЗ:

[Geek, Flare%is%the%best]

Погледајте у излазу како постоје само два елемента у низу резултата који је број дат у параметру лимита. Такође, приметите да се подела примењује само једном, дакле (ограничење-1) пута.

Међутим, ако је регуларни израз ту два пута заредом („%%“), имао би празне подстрингове. Погледајте овај део кода да бисте га боље разумели.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%%the%best%%%";
    String[] substrings=str.split("%",5);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

ИЗЛАЗ:

[Geek, Flare, is, , the%best%%%]

У основи, ако „%“ прати још један „%“ или крај стринга, он се трансформише у празан подниз.

Случај 2: Ако је ограничење <0, акција раздвајања би се применила онолико пута колико је могуће без ограничења величине низа, али би низ садржао празне подстрингове ако је регуларни израз ту два пута заредом („%%“).

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%%the%best%%%";
    String[] substrings=str.split("%",-1);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

ИЗЛАЗ:

[Geek, Flare, is, , the, best, , , ]

Из излаза је очигледно да се подела примењује што је више пута могуће, а такође су присутни празни поднизови.

Случај 3: Ако је лимит=0, акција раздвајања би такође била примењена што је више могуће пута, али би овде сви празни поднизови на крају стринга били одбачени из низа.

import java.util.Arrays;

public class Substrings{    
    public static void main(String args[]){    
    String str="Geek%Flare%is%%the%best%%%";
    String[] substrings=str.split("%",0);
    System.out.println(Arrays.toString(substrings));
     
    }  
}

ИЗЛАЗ:

[Geek, Flare, is, , the, best]

Можемо видети да је излаз прилично сличан између када је лимит=-1 и када је лимит=0, али нема празних подстрингова на крају. Другим речима, занемарују се празни поднизови на крају низа подстрингова.

Такође имајте на уму да ако регуларни израз није присутан у стрингу, он враћа цео оригинални стринг као резултат.

Пронађите да ли стринг садржи подниз

Поред креирања подстрингова од постојећих стрингова, такође можемо да наведемо подниз и сазнамо да ли тај подниз постоји унутар стринга. Ово је брз и лак начин за испитивање подниза, а ово је корисно у многим случајевима коришћења. Али како да то урадимо? Различите методе нам могу помоћи да то постигнемо. Хајде да их прођемо један по један.

Коришћење методе ‘цонтаинс()’:

Веома лако можемо да пронађемо постојање подниза помоћу методе ‘цонтаинс()’. Овај метод стринг класе узима стринг као улаз, који је наш подниз, и враћа логичку вредност која проверава да ли је подстринг унутар стринга или не. Овај метод се може користити унутар иф-елсе блокова, унарних оператора и разних других места за имплементацију сложене логике.

  Топ 8 ДНС/филтрирања садржаја за дом за заштиту породице и деце од сајбер претњи

Хајде да се упознамо мало више са овом методом.

public class Substrings{    
    public static void main(String args[]){    
    String str="techblog.co.rs";    
    System.out.println("Does it contain Flare? n"+ str.contains("Flare"));  
    }  
}

ИЗЛАЗ:

Does it contain Flare? 
true

Код проверава стринг „вдзвдз“ за реч „Фларе“, и када га успешно пронађе, враћа логички „труе“, чиме потврђује постојање подниза.

public class Substrings{    
    public static void main(String args[]){    
    String str="techblog.co.rs";    
    System.out.println("Does it contain Flare? n"+ str.contains("Flare1"));  
    }  
}

ИЗЛАЗ:

Does it contain Flare? 
false

Из примера разумемо да ако подстринг није унутар стринга, метод ће вратити фалсе да би означио његово непостојање. Тако да можемо лако бити сигурни да ли подниз постоји.

Проналажење положаја подниза

#1. Коришћење ‘индекОф()’:

Метода ‘индекОф()’ се може користити за проналажење постојања подниза, као и за проналажење његовог индекса. Метода узима као улаз стринг или карактер и даје нам позицију његовог првог појављивања. Али може да нам да само индекс првог појављивања и не може да потврди да ли постоје друге појаве. Још једна ствар коју треба приметити овде, ако подстринг не постоји, метод враћа -1.

Дакле, хајде да истражимо овај метод мало више.

public class Substrings{    
    public static void main(String args[]){    
    String str="GeekFlareGeekFlare";    
    System.out.println("Index of Flare: "+ str.indexOf("Flare"));  
    }  
}

ИЗЛАЗ:

Index of Flare: 4

Овде у примеру, прво појављивање подниза „Фларе“ почиње од индекса 4 у низу „ГеекФлареГеекФларе“. Дакле, као што се очекивало, функција је вратила индекс.

#2. Коришћење ‘ластИндекОф()’:

‘ластИндекОф()’ је веома сличан ‘индекОф()’. Обе ове методе узимају као улаз подстринг и враћају индекс његове позиције. Чак има исту повратну вредност када не може да пронађе подниз у наведеном низу. Обе ове методе враћају -1 за неуспешно проналажење.

Али док ‘индекОф()’ враћа индекс првог појављивања подниза, ‘ластИндекОф()’ враћа последње појављивање.

Хајде да то видимо на делу кроз код:

public class Substrings{    
    public static void main(String args[]){    
    String str="GeekFlareGeekFlare";    
    System.out.println("Last index of Flare: "+ str.lastIndexOf("Flare"));  
    }  
}

ИЗЛАЗ:

Last index of Flare:13

Посматрајући овај излаз, схватамо да се метода ‘ластИндекОф()’ понаша како се очекује и добијамо индекс последњег појављивања подниза „Фларе” у низу „ГеекФлареГеекФларе”.

ФАКс

Како користити метод ‘сплит()’ за креирање непразних подстрингова?

Ако постоји више инстанци регуларног израза у главном низу једна за другом („Хелло%%Хи“, где је регек „%“), метода „сплит()“ сматра прву инстанцу знаком за прекид, а остатак даје излаз празног стринга. Да бисмо ово ублажили, можемо одредити лимит параметар као 0. Стога ће као излаз дати само непразне стрингове.

Да ли ‘индекОф()’ враћа индексе свих инстанци подниза?

Не, ‘индекОф()’ не враћа индексе свих инстанци подниза. Са ‘индекОф()’ добијамо целобројну повратну вредност која садржи индекс првог појављивања подниза. Али ако не може да пронађе подниз, метод ће вратити -1.

Шта враћа метода ‘субстринг()’ ако дати индекси не постоје у стрингу?

Ако дати почетни индекс и крајњи индекс не постоје у стрингу, компајлер ће избацити грешку. Грешка би требало да има „јава.ланг.СтрингИндекОутОфБоундсЕкцептион: “ и једноставно се неће извршити.

Закључак

У овом чланку смо разговарали о различитим методама и основама за почетак рада са подстринговима. Разговарали смо о креирању подниза и провери постојања подниза унутар стринга. Ово ће вам дати боље разумевање како да радите са подстринговима. Пратите примере и вежбајте више да бисте стекли темељно разумевање подстрингова.

Затим можете да проверите нашу листу питања за Јава интервју.