CodeGym/Java блог/Случаен/Подниз в Java
John Squirrels
Ниво
San Francisco

Подниз в Java

Публикувано в групата
Най-популярните действия върху String в Java са конкатенация, получаване на знак по индекс и получаване на подниз. В тази статия ще ви разкажем за метода на Java substring.

Какво е Java Substring?

Поднизът на Java като цяло е непрекъсната последователност от знаци вътре в низа. Може да бъде част от низа or целия низ. Подниз в Java - 2Какво е подниз в Java? Този език има метод substring() or по-скоро два метода, благодарение на претоварването на методите на Java. Можете да ги използвате, за да получите подниз в Java програма. Първият метод на Java substring е String substring(firstIndex), а вторият е String substring (firstIndex, lastIndex) .

Как да използвате подниз в Java

Отговорът е прост: просто използвайте подниза. Методът Java substring() връща част от низа. Има два метода, които можете да използвате за това:
Синтаксис на метода подниз Подниз от низ (firstIndex) Подниз от низ (firstIndex, lastIndex)
Аргументи firstIndex е число във вашия низ, което е първият индекс на вашия подниз. Включително. Последното число на вашия подниз е последното число на целия низ firstIndex е число във вашия низ, което е първият индекс на вашия подниз. Включително.
lastIndex е номерът на вашия низ, първият и всички след него са изключени от вашия подниз
Примери за използване на подниз в Java
String s = "CodeGym";
System.out.println(s.substring(4));
//returns Gym
String s = "CodeGym";
System.out.println(s.substring(2,5));
//returns deG
Много популярни задачи, които ви помагат да разберете
  • Как да получите подниз в 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
Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари