CodeGym /Blog Java /rawak /Subrentetan dalam Java
John Squirrels
Tahap
San Francisco

Subrentetan dalam Java

Diterbitkan dalam kumpulan
Tindakan paling popular pada String dalam Java ialah penggabungan, mendapatkan aksara mengikut indeks dan mendapatkan subrentetan. Dalam artikel ini kami akan memberitahu anda tentang kaedah subrentetan Java.

Apakah Java Substring?

Subrentetan Java secara amnya ialah jujukan aksara yang bersebelahan di dalam String. Ia boleh menjadi sebahagian daripada String atau keseluruhan String juga. Subrentetan dalam Java - 2Apakah subrentetan dalam Java? Bahasa ini mempunyai kaedah subrentetan() , atau lebih tepatnya dua kaedah, terima kasih kepada kelebihan beban kaedah Java. Anda boleh menggunakannya untuk mendapatkan subrentetan dalam program Java. Kaedah subrentetan Java pertama ialah String substring(firstIndex) dan yang kedua ialah String substring (firstIndex, lastIndex) .

Cara menggunakan subrentetan dalam Java

Jawapannya mudah: hanya gunakan subrentetan. Kaedah Java substring() mengembalikan sebahagian daripada rentetan. Terdapat dua kaedah yang boleh anda gunakan untuk ini:
Sintaks kaedah subrentetan Substring rentetan(firstIndex) Subrentetan rentetan (firstIndex, lastIndex)
Hujah firstIndex ialah nombor dalam String anda yang merupakan indeks pertama subrentetan anda. Inklusif. Nombor terakhir Subrentetan anda ialah nombor terakhir keseluruhan rentetan firstIndex ialah nombor dalam String anda yang merupakan indeks pertama subrentetan anda. Inklusif.
lastIndex ialah nombor String anda, pertama sekali dan selepas ia dikecualikan daripada subrentetan anda
Contoh cara menggunakan subrentetan dalam Java

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

String s = "CodeGym"; 
System.out.println(s.substring(2,5));
//returns deG
Tugas yang sangat popular yang membantu anda memahami
  • Bagaimana untuk mendapatkan subrentetan dalam Java
  • Bagaimana untuk mencari semua subrentetan rentetan tertentu
  • Bagaimana untuk mencari subrentetan biasa terpanjang

Bagaimana untuk mendapatkan subrentetan dalam Java (khususnya)

Contoh subrentetan Java pertama ini agak mudah. Anda mempunyai String dan anda perlu mencari substring "CodeGym" di dalamnya. Anda telah pun mengetahui cara mendapatkan subrentetan dalam Java. Jadi inilah penyelesaian masalah khusus ini:

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

   }
}
Outputnya ialah: Proses CodeGym selesai dengan kod keluar 0 Bagaimana untuk mencari semua subrentetan rentetan tertentu Di sini kita mempunyai cara paling mudah untuk mencari semua subrentetan bagi Rentetan tertentu.

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));
           }
       }    
   }
}
Outputnya ialah: 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 Proses selesai dengan kod keluar 0 Bagaimana untuk mencari subrentetan biasa terpanjang Masalah subrentetan biasa terpanjang adalah salah satu tugas paling popular dalam sains komputer. Anda boleh menemuinya pada temuduga Pembangun Junior anda dengan kebarangkalian yang agak tinggi. Bagaimanapun, cuba selesaikan, ia adalah latihan yang sangat berguna untuk pengaturcara pemula. Masalah subrentetan biasa terpanjang bermaksud mencari rentetan terpanjang (atau beberapa daripadanya) iaitu subrentetan (atau subrentetan) daripada dua atau lebih rentetan. Sebagai contoh anda mempunyai dua rentetan

String first = "CodeGym" 
String second = "SomeGym"
Output hendaklah: eGym Jadi, anda perlu menyusun "pertama" dan "kedua". Cetak subrentetan biasa terpanjang. Jika dua atau lebih subrentetan mempunyai nilai yang sama untuk subrentetan biasa terpanjang, cetak mana-mana daripadanya. Kami amat mengesyorkan anda untuk mencuba menyelesaikan masalah ini sendiri dan hanya selepas itu lihat kod di bawah.

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));
   }
}
Outputnya ialah: Substring biasa terpanjang = eGym

Bagaimanakah subrentetan berfungsi dalam Java

Dalam JDK 7 dan versi yang lebih baru, substring() tidak lagi mengira bilangan aksara dalam tatasusunan aksara yang diciptanya, seperti yang dilakukan dalam versi sebelum JDK 6 inklusif, tetapi hanya mencipta tatasusunan baharu dalam ingatan (timbunan) dan merujuk kepadanya . Berikut adalah contoh:

String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
Jadi, dalam JDK 7 dan kemudian, objek y dan z dicipta hasil daripada kaedah subrentetan() yang digunakan pada objek x akan merujuk kepada dua tatasusunan yang baru dibuat (pada timbunan) - {d,e, G, y} untuk y dan {C, o} untuk z . Dalam versi JDK 7 + subrentetan kaedah, dua baris baharu ini (iaitu dua tatasusunan aksara baharu) akan disimpan dalam ingatan bersama rentetan asal myLongString ({ C, o, d, e, G, y, m, i, s, t, h, e, b,e,s,t} dalam bentuk tatasusunan) .

JDK 6 versi subrentetan

Malah pada hari ini pada beberapa projek besar anda mungkin memenuhi asas kod warisan daripada JDK sebanyak 6 kali. Dalam kaedah JDK 6 substring() berfungsi dengan cara yang berbeza. Seperti yang anda mungkin tahu, String ialah Kelas yang tidak berubah dan untuk mendapatkan subrentetan Java menggunakan kebolehubah ini lebih awal dalam JDK 6. Objek jenis String di dalam hanyalah tatasusunan aksara, atau lebih tepatnya, mengandungi tatasusunan aksara. Pada masa JDK 6, dua lagi pembolehubah disimpan di sana: bilangan aksara pertama dalam tatasusunan aksara dan kuantitinya. Oleh itu, dalam JDK 6, String mempunyai tiga medan nilai aksara [] (tatasusunan aksara), int offset (indeks aksara pertama dalam tatasusunan), dan kiraan int(bilangan aksara dalam tatasusunan). Apabila subrentetan dibuat dalam JDK 6, tatasusunan aksara tidak disalin ke dalam objek String baharu . Sebaliknya, kedua-dua Objek menyimpan rujukan kepada Tatasusunan Aksara yang sama. Walau bagaimanapun, Objek kedua menyimpan dua lagi pembolehubah, simbol pertama subrentetan dan yang kedua ialah tentang berapa banyak simbol dalam subrentetan. Kaedah JDK 6 telah digantikan kerana masalah kebocoran memori. Apakah maksudnya? Katakan kita mempunyai string x, dan kita mencipta beberapa subrentetan menggunakan substring.

String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
Sekarang kita mempunyai objek x yang disimpan dalam kawasan memori khas yang dipanggil heap, dan dua objek y dan z merujuk kepada objek yang sama x . Hanya x merujuk kepada unsur dari kedua hingga keenam, dan z merujuk kepada unsur x dari sifar hingga ketiga. Bagaimana jika objek asal x telah digunakan dan dibiarkan tanpa sebarang rujukan padanya? Dalam program semua objek lain berfungsi dengan y dan z sahaja. Dalam kes ini pemungut sampah boleh memusnahkan objek x, manakala tatasusunan memori kekal, dan ia digunakan oleh y dan z. Kebocoran ingatan berlaku. Jadi, kaedah yang lebih baru, JDK 7 dan versi yang lebih baru, agak mahal dari segi penggunaan memori. Walau bagaimanapun ia membolehkan anda mengelakkan kebocoran memori. Di samping itu, kaedah baru berfungsi lebih cepat, kerana ia tidak perlu mengira bilangan aksara. Untuk mengukuhkan perkara yang anda pelajari, kami cadangkan anda menonton pelajaran video daripada Kursus Java kami
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION