Фрагмент от лекция с ментор като част от курса на Codegym University. Запишете се за пълния курс.


1 Сравняване на низове

Една от най-често срещаните операции с низове е сравнението. Класът String има над десет различни метода, които се използват за сравняване на един низ с друг низ. По-долу ще разгледаме 8 от основните.

Методи Описание
boolean equals(String str)
Низовете се считат за равни, ако всичките им символи съвпадат.
boolean equalsIgnoreCase(String str)
Сравнява низове, като игнорира големината на буквите (игнорира дали са главни or малки)
int compareTo(String str)
Сравнява низове, връща броя на съответстващите знаци от началото на низа.
public int compareToIgnoreCase(String str)
Връща броя на съвпадащите знаци от началото на низ, игнорира главни и малки букви
boolean regionMatches(int toffset, String str, int offset, int len)
Сравнява части от низове
boolean startsWith(String prefix)
Проверява дали текущият низ започва с низаprefix
boolean endsWith(String suffix)
Проверява дали текущият низ завършва с низаsuffix

Да приемем, че искате да напишете програма, която пита потребителя за път към файл и след това проверява типа на file въз основа на неговото разширение. Кодът на такава програма може да изглежда така:

Код Бележки
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
Създаване на Scannerобект
Прочетете ред от конзолата

Проверете дали низът pathзавършва с дадения низ


2 Търсене на поднизове

След сравняването на низове, втората най-популярна операция е намирането на един низ в друг. Класът String също има няколко метода за това:

Методи Описание
int indexOf(String str)
Търси низа strв текущия низ. Връща индекса на първия знак от първото срещане.
int indexOf(String str, int index)
Търси низа strв текущия низ, като пропуска първите indexзнаци. Връща индекса на събитието.
int lastIndexOf(String str)
Търси низа strв текущия низ, започвайки от края. Връща индекса на първото срещане.
int lastIndexOf(String str, int index)
Търси низа strв текущия низ от края, като пропуска първите indexзнаци.
boolean matches(String regex)
Проверява дали текущият низ съответства на модел, определен от регулярен израз.

Методите indexOf(String)и indexOf(String, index)често се използват в комбинация. Първият метод ви позволява да намерите първото срещане на предадения подниз в текущия низ. А вторият метод ви позволява да намерите второто, третото и т.н. срещане, като пропуснете първите индексни знаци.

Да предположим, че имаме url като " https://domain.com/about/reviews " и искаме да заменим името на домейна с " codegym.cc ". URL addressите могат да имат всяHowви различни имена на домейни, но ние знаем следното:

  • Името на домейна се предхожда от две наклонени черти — „//“
  • Името на домейна е последвано от една наклонена черта напред — " /"

Ето How би изглеждал codeът за такава програма:

Код Бележки
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Създайте обект на скенер
Прочетете ред от конзолата

Вземете индекса на първото появяване на низа " //"
Получаваме индекса на първото срещане на низа /, но гледаме само след срещане на знаците //.
Получаваме низа от началото до края на знаците. //
Получаваме низа от /до края.

Свързваме низовете и новия домейн.

Методите lastIndexOf(String)и lastIndexOf(String, index)работят по същия начин, само търсенето се извършва от края на низа към началото.



3 Създаване на поднизове

Фрагмент от лекция с ментор като част от курса на Codegym University. Запишете се за пълния курс.


В допълнение към сравняването на низове и намирането на поднизове, има още едно много популярно действие: получаване на подниз от низ. Както се случва, предишният пример ви показа substring()извикване на метод, който върна част от низ.

Ето списък от 8 метода, които връщат поднизове от текущия низ:

Методи Описание
String substring(int beginIndex, int endIndex)
Връща подниза, определен от диапазона на индекса beginIndex..endIndex.
String repeat(int count)
Повтаря текущия низ n пъти
String replace(char oldChar, char newChar)
Връща нов низ: замества знака oldCharсъс знакаnewChar
String replaceFirst(String regex, String replacement)
Заменя първия подниз, определен от регулярен израз, в текущия низ.
public String replaceAll(String regex, String replacement)
Заменя всички поднизове в текущия низ, които съответстват на регулярния израз.
String toLowerCase()
Преобразува низа в малки букви
String toUpperCase()
Преобразува низа в главни букви
String trim()
Премахва всички интервали в началото и края на низ

Ето обобщение на наличните методи:

substring(int beginIndex, int endIndex)метод

Методът substringвръща нов низ, който се състои от знаци в текущия низ, започващ от знака с индекс beginIndexи завършващ на endIndex. Както при всички интервали в Java, символът с индекс endIndexне е включен в интервала. Примери:

Код Резултат
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Ако endIndexпараметърът не е посочен (което е възможно), тогава поднизът се взема от знака в beginIndex до края на низа.

repeat(int n)метод

Методът за повторение просто повтаря текущите nвремена на низа. Пример:

Код Резултат
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(chat oldChar, char newChar)метод

Методът replace()връща нов низ, в който всички символи oldCharса заменени със знака newChar. Това не променя дължината на низа. Пример:

Код Резултат
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()и replaceAll()методи

Методът replaceAll()замества всички срещания на един подниз с друг. Методът replaceFirst()замества първото появяване на предадения подниз с посочения подниз. Низът, който трябва да бъде заменен, се определя от регулярен израз. Ще се задълбочим в регулярните изрази в търсенето на Java Multithreading .

Примери:

Код Резултат
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()методи

Запознахме се с тези методи, когато за първи път научихме за извикването на методите на Stringкласа.

trim()метод

Методът trim()премахва начални и завършващи интервали от низ. Не докосва интервали, които са вътре в низ (т.е. не в началото or края). Примери:

Код Резултат
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"