Java'daki String üzerindeki en popüler eylemler, birleştirme, dizine göre bir karakter alma ve bir alt dize almadır. Bu yazımızda sizlere Java substring metodundan bahsedeceğiz.

Java Alt Dizesi nedir?

Genel olarak Java Substring, String içindeki bitişik bir karakter dizisidir. String'in bir parçası veya tüm String olabilir. Java'da alt dize - 2Java'da alt dize nedir? Java yönteminin aşırı yüklenmesi sayesinde bu dilin bir substring() yöntemi veya daha doğrusu iki yöntemi vardır. Java programında alt dizi almak için kullanabilirsiniz. İlk Java alt dize yöntemi, String substring(firstIndex) ve ikincisi, String substring (firstIndex, lastIndex) yöntemidir .

Java'da alt dize nasıl kullanılır?

Cevap basit: sadece alt diziyi kullanın. Java substring() yöntemi, dizenin bir bölümünü döndürür. Bunun için kullanabileceğiniz iki yöntem vardır:
alt dize yönteminin sözdizimi Dize alt dizesi (ilk Dizin) Dize alt dizesi (ilk Dizin, son Dizin)
Argümanlar firstIndex , Dizenizdeki, alt dizinizin ilk dizini olan bir sayıdır. Dahil. Alt Dizinizin son sayısı, tüm dizenin son sayısıdır. firstIndex , Dizenizdeki, alt dizinizin ilk dizini olan bir sayıdır. Dahil.
lastIndex , öncelikle ve alt dizinizden çıkarıldıktan sonraki tüm Dizenizin sayısıdır.
Java'da alt dizenin nasıl kullanılacağına ilişkin örnekler

String s = "CodeGym";
System.out.println(s.substring(4));
//returns Gym

String s = "CodeGym"; 
System.out.println(s.substring(2,5));
//returns deG
Anlamanıza yardımcı olan çok popüler görevler
  • Java'da bir alt dize nasıl elde edilir
  • Belirli bir dizgenin tüm alt dizileri nasıl bulunur?
  • En uzun ortak alt dize nasıl bulunur?

Java'da bir alt dize nasıl elde edilir (özel)

Bu ilk Java alt dize örneği oldukça kolaydır. Bir Diziniz var ve onun içinde bir "CodeGym" alt dizisi bulmanız gerekiyor. Java'da bir alt dizeyi nasıl alacağınızı zaten biliyorsunuz. İşte bu özel sorunun çözümü:

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));

   }
}
Çıktı şu şekildedir: CodeGym İşlem, çıkış kodu 0 ile tamamlandı Belirli bir dizinin tüm alt dizilerini nasıl bulabilirim Burada, belirli bir Dizinin tüm alt dizilerini bulmanın en basit yolunu bulduk.

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));
           }
       }    
   }
}
Çıktı: C Co Cod Code CodeG CodeGy CodeGym ode odeG odeGy odeGym d deG deGy deGym e eG eGy eGym G Gy Gym y ym m İşlem çıkış kodu 0 ile tamamlandı En uzun ortak alt dizi nasıl bulunur En uzun ortak alt dizi sorunu bilgisayar bilimindeki en popüler görevlerden biridir. Küçük Geliştirici görüşmenizde oldukça yüksek bir olasılıkla karşılaşabilirsiniz. Her neyse, çözmeye çalışın, yeni başlayan bir programcı için çok faydalı bir alıştırma. En uzun ortak alt dizi sorunu, iki veya daha fazla dizinin bir alt dizisi (veya alt dizisi olan) olan en uzun diziyi (veya birkaç tanesini) bulmak anlamına gelir. Örneğin, iki dizeniz var

String first = "CodeGym" 
String second = "SomeGym"
Çıktı şöyle olmalıdır: eGym Yani, "birinci" ve "ikinci" dizilerini kullanmalısınız. En uzun ortak alt diziyi yazdırın. İki veya daha fazla alt dize en uzun ortak alt dize için aynı değere sahipse, bunlardan herhangi birini yazdırın. Bu sorunu kendi başınıza çözmeye çalışmanızı ve ancak bundan sonra aşağıdaki kodu incelemenizi önemle tavsiye ederiz.

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));
   }
}
Çıktı: En uzun ortak alt dize = eGym

Alt dize Java'da nasıl çalışır?

JDK 7 ve daha yeni sürümlerde, substring(), JDK 6 dahil önceki sürümlerde olduğu gibi artık oluşturduğu karakter dizisindeki karakter sayısını saymaz, yalnızca bellekte (yığın) yeni bir dizi oluşturur ve ona başvurur. . İşte bir örnek:

String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
Bu nedenle, JDK 7 ve sonrasında, x nesnesine uygulanan substring() yönteminin bir sonucu olarak oluşturulan y ve z nesneleri , yeni oluşturulan iki diziye (yığın üzerinde) atıfta bulunacaktır - y için {d,e, G, y} ve z için {C, o} . Yöntem alt dizesinin JDK 7 + sürümünde, bu iki yeni satır (yani, iki yeni karakter dizisi), orijinal dize myLongString ({C, o, d, e, G, y, m, i, s, t, h, e, b,e,s,t} dizi şeklinde) .

Alt dizenin JDK 6 sürümü

Bugün bile bazı büyük projelerde JDK'dan gelen eski kod tabanıyla 6 kez karşılaşabilirsiniz. JDK 6'da substring() yöntemi farklı bir şekilde çalışır. Muhtemelen bildiğiniz gibi, String değişmez bir Sınıftır ve alt dizgiyi elde etmek için Java bu değişmezliği JDK 6'da daha önce kullandı. İçindeki String türündeki Nesne yalnızca bir karakter dizisidir veya daha doğrusu bir karakter dizisi içerir. JDK 6 zamanında, orada iki değişken daha saklanıyordu: karakter dizisindeki ilk karakterin numarası ve bunların miktarı. Bu nedenle, JDK 6'da, String'in üç char değeri [] (karakter dizisi), int ofset (dizideki ilk karakterin dizini) ve int sayısı alanı vardı.(dizideki karakter sayısı). JDK 6'da bir alt dize oluşturulduğunda, karakter dizisi yeni String nesnesine kopyalanmaz . Bunun yerine, her iki Nesne de aynı Karakter Dizisine bir referans depolar. Bununla birlikte, ikinci Nesne iki değişken daha depolar, ilk alt dizenin sembolü ve ikincisi, alt dizede kaç sembol olduğu ile ilgilidir. Bellek sızıntısı sorunu nedeniyle JDK 6 yöntemi değiştirildi. Bu ne anlama geliyor? Diyelim ki bir dizimiz var xve alt diziyi kullanarak birkaç alt dizi oluşturduk.

String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
Şimdi , yığın adı verilen özel bir bellek alanında depolanan bir x nesnemiz ve aynı nesneye atıfta bulunan y ve z iki nesnemiz var x . Yalnızca x, ikinciden altıncıya kadar olan öğeleri ifade eder ve z , sıfırdan üçüncüye kadar olan x öğelerini ifade eder . Ya orijinal nesne x zaten kullanılmışsa ve üzerinde herhangi bir referans olmadan bırakılmışsa? Bir programda diğer tüm nesneler sadece y ve z ile çalışır . Bu durumda, çöp toplayıcı x nesnesini yok edebilir., bellek dizisi kalırken, y ve z tarafından kullanılır. Bellek sızıntısı olur. Bu nedenle, daha yeni olan JDK 7 ve sonraki sürüm yöntemi, bellek kullanımı açısından oldukça maliyetlidir. Ancak bellek sızıntısını önlemenizi sağlar. Ek olarak, karakter sayısını hesaplamak zorunda olmadığı için yeni yöntem daha hızlı çalışır. Öğrendiklerinizi pekiştirmek için Java Kursumuzdan bir video dersi izlemenizi öneririz.