Най-популярните действия върху String в Java са конкатенация, получаване на знак по индекс и получаване на подниз. В тази статия ще ви разкажем за метода на Java substring.
Много популярни задачи, които ви помагат да разберете
Какво е Java Substring?
Поднизът на Java като цяло е непрекъсната последователност от знаци вътре в низа. Може да бъде част от низа or целия низ. Какво е подниз в Java? Този език има метод substring() or по-скоро два метода, благодарение на претоварването на методите на Java. Можете да ги използвате, за да получите подниз в Java програма. Първият метод на Java substring е String substring(firstIndex), а вторият е String substring (firstIndex, lastIndex) .Как да използвате подниз в Java
Отговорът е прост: просто използвайте подниза. Методът Java substring() връща част от низа. Има два метода, които можете да използвате за това:Синтаксис на метода подниз | Подниз от низ (firstIndex) | Подниз от низ (firstIndex, lastIndex) |
---|---|---|
Аргументи | firstIndex е число във вашия низ, което е първият индекс на вашия подниз. Включително. Последното число на вашия подниз е последното число на целия низ | firstIndex е число във вашия низ, което е първият индекс на вашия подниз. Включително. lastIndex е номерът на вашия низ, първият и всички след него са изключени от вашия подниз |
Примери за използване на подниз в Java |
|
|
- Как да получите подниз в Java
- Как да намерите всички поднизове на даден низ
- Как да намерим най-дългия общ подниз
Как да получите подниз в Java (по-специално)
Този първи пример за подниз в Java е доста лесен. Имате низ и трябва да намерите подниз „CodeGym“ в него. Вече знаете How да получите подниз в Java. И така, ето решението на този конкретен проблем:
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String s1 = "the best Java Core course is CourseCodeGym. End of story";
String myTarget = "CodeGym";
int index1 = s1.indexOf(myTarget);
int index2 = index1 + myTarget.length();
System.out.println(s1.substring(index1, index2));
}
}
Резултатът е: Процесът на CodeGym завърши с изходен code 0 Как да намерим всички поднизове на даден низ Тук имаме най-простия начин да намерим всички поднизове на даден низ.
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
String myTarget = "CodeGym";
for (int i = 0; i < myTarget.length(); i++) {
for (int j = i + 1; j <= myTarget.length(); j++) {
System.out.println(myTarget.substring(i, j));
}
}
}
}
Резултатът е: C Co Cod Code CodeG CodeGy CodeGym o od ode odeG odeGy odeGym d de deG deGy deGym e eG eGy eGym G Gy Gym y ym m Процесът завърши с изходен code 0 Как да намерим най-дългия общ подниз Проблем с най-дългия общ подниз е една от най-популярните задачи в компютърните науки. Можете да го срещнете на вашето интервю за Junior Developer с доста голяма вероятност. Както и да е, опитайте се да го решите, това е много полезно упражнение за начинаещ програмист. Проблемът с най-дългия общ подниз означава да се намери най-дългият низ (or няколко от тях), който е подниз (or са поднизове) от два or повече низа. Например имате два низа
String first = "CodeGym"
String second = "SomeGym"
Изходът трябва да бъде: eGym И така, трябва да въведете низове "first" и "second". Отпечатайте най-дългия общ подниз. Ако два or повече подниза имат еднаква стойност за най-дългия общ подниз, отпечатайте всеки от тях. Силно ви препоръчваме да опитате да разрешите този проблем сами и едва след това да погледнете codeа по-долу.
public class SubStringTest {
// in this method we are looking for the Longest common substring of
// first String with length = m and the second String with length = n
public static String longestCS(String first, String second, int m, int n) {
// the maximal length
int maxLength = 0;
// the last index of the longest common substring
int endIndex = m;
// array stores the length of substring
int[][] keeper = new int[m + 1][n + 1];
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
// check if current characters of first and second strings match
if (first.charAt(i - 1) == second.charAt(j - 1)) {
keeper[i][j] = keeper[i - 1][j - 1] + 1;
if (keeper[i][j] > maxLength) {
maxLength = keeper[i][j];
endIndex = i;
}
}
}
}
return first.substring(endIndex - maxLength, endIndex);
}
public static void main(String[] args) {
String first = "CodeGym";
String second = "SomeGym";
int m = first.length(), n = second.length();
System.out.println("The longest common substring = " + longestCS(first, second, m, n));
}
}
Резултатът е: Най-дългият общ подниз = eGym
Как работи поднизът в Java
В JDK 7 и по-нови версии, substring() вече не брои броя знаци в масива от знаци, който създава, Howто беше във версии преди JDK 6 включително, а просто създава нов масив в паметта (купчина) и препраща към него . Ето един пример:
String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
И така, в JDK 7 и по-нови, обекти y и z , създадени в резултат на метода substring() , приложен към обект x , ще се отнасят до два новосъздадени масива (в купчината) - {d,e, G, y} за y и {C, o} за z . Във version JDK 7 + на подниза на метода тези два нови реда (т.е. два нови масива от знаци) ще бъдат съхранени в паметта заедно с оригиналния низ myLongString ({ C, o, d, e, G, y, m, i, s, t, h, e, b,e,s,t} под формата на масив) .
JDK 6 version на подниз
Дори днес при някои големи проекти може да срещнете наследена codeова база от JDK 6 пъти. В JDK 6 методът substring() работи по различен начин. Както вероятно знаете, String е неизменен клас и за да получи подниза, Java използва тази неизменност по-рано в JDK 6. Обектът от тип String вътре е просто масив от знаци or по-скоро съдържа масив от знаци. По времето на JDK 6 там се съхраняваха още две променливи: номерът на първия знак в масива от знаци и тяхното количество. По този начин, в JDK 6, String имаше три полета на char стойност [] (символен масив), int отместване (индекс на първия знак в масива) и int count(броят знаци в масива). Когато се създава подниз в JDK 6, масивът от знаци не се копира в новия обект String . Вместо това и двата обекта съхраняват препратка към един и същ масив от символи. Вторият обект обаче съхранява още две променливи, първият символ на подниза, а вторият е за това колко символа има в подниза. Методът JDK 6 беше заменен поради проблем с изтичане на памет. Какво означава? Да приемем, че имаме низx
и създаваме няколко подниза с помощта на подниз.
String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
Сега имаме обект x , съхранен в специална област на паметта, наречена купчина, и два обекта y и z , отнасящи се до един и същ обект x . Само x се отнася за елементите от втори до шести, а z се отнася за x елементи от нула до трета. Ами ако оригиналният обект x вече е бил използван и е оставен без ниHowви препратки към него? В програмата всички други обекти работят само с y и z . В този случай събирачът на отпадъци може да унищожи обекта x, докато масивът от памет остава и се използва от y и z. Изтичането на памет се случва. Така че по-новият, JDK 7 и по-нова version, метод е доста скъп по отношение на използването на паметта. Въпреки това ви позволява да предотвратите изтичане на памет. Освен това новият метод работи по-бързо, тъй като не трябва да изчислява броя на знаците. За да затвърдите наученото, ви предлагаме да гледате видео урок от нашия курс по Java
GO TO FULL VERSION