CodeGym/Blog Java/Ngẫu nhiên/Chuỗi con trong Java

Chuỗi con trong Java

Xuất bản trong nhóm
Các hành động phổ biến nhất trên Chuỗi trong Java là ghép nối, lấy một ký tự theo chỉ mục và lấy một chuỗi con. Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn về phương thức chuỗi con trong Java.

Chuỗi con Java là gì?

Chuỗi con Java nói chung là một chuỗi các ký tự liền kề bên trong Chuỗi. Nó có thể là một phần của Chuỗi hoặc toàn bộ Chuỗi. Chuỗi con trong Java - 2Chuỗi con trong Java là gì? Ngôn ngữ này có một phương thức substring() , hay đúng hơn là hai phương thức, nhờ nạp chồng phương thức Java. Bạn có thể sử dụng chúng để lấy chuỗi con trong chương trình Java. Phương thức chuỗi con Java đầu tiên là String substring(firstIndex) và phương thức thứ hai là String substring (firstIndex, lastIndex) .

Cách sử dụng chuỗi con trong Java

Câu trả lời rất đơn giản: chỉ cần sử dụng chuỗi con. Phương thức substring() trong Java trả về một phần của chuỗi. Có hai phương pháp bạn có thể sử dụng cho việc này:
Cú pháp của phương thức chuỗi con Chuỗi con chuỗi(firstIndex) Chuỗi con chuỗi (first Index, last Index)
Tranh luận firstIndex là một số trong Chuỗi của bạn, là chỉ mục đầu tiên của chuỗi con của bạn. bao gồm. Số cuối cùng của Chuỗi con của bạn là số cuối cùng của cả chuỗi firstIndex là một số trong Chuỗi của bạn, là chỉ mục đầu tiên của chuỗi con của bạn. bao gồm.
last Index là số Chuỗi của bạn, đầu tiên và tất cả sau khi nó được loại trừ khỏi chuỗi con của bạn
Ví dụ về cách sử dụng chuỗi con trong Java
String s = "CodeGym";
System.out.println(s.substring(4));
//returns Gym
String s = "CodeGym";
System.out.println(s.substring(2,5));
//returns deG
Nhiệm vụ rất phổ biến giúp bạn hiểu
  • Cách lấy chuỗi con trong Java
  • Cách tìm tất cả các chuỗi con của một chuỗi đã cho
  • Cách tìm xâu con chung dài nhất

Cách lấy chuỗi con trong Java (đặc biệt)

Ví dụ về chuỗi con Java đầu tiên này khá dễ dàng. Bạn có một Chuỗi và bạn cần tìm một chuỗi con "CodeGym" trong đó. Bạn đã biết cách lấy chuỗi con trong Java. Vì vậy, đây là giải pháp cho vấn đề cụ thể này:
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));

   }
}
Kết quả là: CodeGym Quá trình kết thúc với mã thoát 0 Cách tìm tất cả các chuỗi con của một chuỗi đã cho Ở đây chúng ta có cách đơn giản nhất để tìm tất cả các chuỗi con của một Chuỗi đã cho.
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));
           }
       }
   }
}
Đầu ra là: C Co Cod Code CodeG CodeGy CodeGym o od ode odeG odeGy odeGym d de deG deGy deGym e eG eGy eGy eGym G Gy Gym y ym m Quá trình kết thúc với mã thoát 0 Cách tìm xâu con chung dài nhất Bài toán xâu con chung dài nhất là một trong những nhiệm vụ phổ biến nhất trong khoa học máy tính. Bạn có thể gặp nó trong cuộc phỏng vấn Nhà phát triển cơ sở với xác suất khá cao. Dù sao, hãy cố gắng giải nó, nó là một bài tập rất hữu ích cho một lập trình viên mới bắt đầu. Bài toán về xâu con chung dài nhất có nghĩa là tìm xâu dài nhất (hoặc một vài xâu) là xâu con (hoặc là các xâu con) của hai hay nhiều xâu. Ví dụ bạn có hai chuỗi
String first = "CodeGym"
String second = "SomeGym"
Đầu ra phải là: eGym Vì vậy, bạn phải nhập chuỗi "thứ nhất" và "thứ hai". In ra xâu con chung dài nhất. Nếu hai hoặc nhiều chuỗi con có cùng giá trị cho chuỗi con chung dài nhất, hãy in bất kỳ chuỗi con nào. Chúng tôi thực sự khuyên bạn nên tự mình thử giải quyết vấn đề này và chỉ sau đó hãy xem mã bên dưới.
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));
   }
}
Đầu ra là: Chuỗi con chung dài nhất = eGym

Chuỗi con hoạt động như thế nào trong Java

Trong JDK 7 và các phiên bản mới hơn, substring() không còn đếm số lượng ký tự trong mảng ký tự mà nó tạo ra, giống như trong các phiên bản trước JDK 6, mà chỉ cần tạo một mảng mới trong bộ nhớ (heap) và tham chiếu đến nó . Đây là một ví dụ:
String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
Vì vậy, trong JDK 7 trở lên, các đối tượng yz được tạo là kết quả của phương thức chuỗi con() được áp dụng cho đối tượng x sẽ tham chiếu đến hai mảng mới được tạo (trên heap) - {d,e, G, y} cho y{C, o} cho z . Trong phiên bản JDK 7 + của chuỗi con phương thức, hai dòng mới này (nghĩa là hai mảng ký tự mới) sẽ được lưu trong bộ nhớ cùng với chuỗi gốc myLongString ({ C, o, d, e, G, y, m, i, s, t, h, e, b,e,s,t} ở dạng mảng) .

Phiên bản JDK 6 của chuỗi con

Thậm chí ngày nay trên một số dự án lớn, bạn có thể gặp cơ sở mã kế thừa từ JDK 6 lần. Trong JDK 6 phương thức substring() hoạt động theo một cách khác. Như bạn có thể biết, Chuỗi là một Lớp bất biến và để lấy chuỗi con, Java đã sử dụng tính không thay đổi này trước đó trong JDK 6. Đối tượng kiểu Chuỗi bên trong chỉ là một mảng ký tự, hay đúng hơn là chứa một mảng ký tự. Tại thời điểm JDK 6, hai biến nữa được lưu trữ ở đó: số ký tự đầu tiên trong mảng ký tự và số lượng của chúng. Do đó, trong JDK 6, String có ba trường giá trị char [] (mảng ký tự), int offset (chỉ số của ký tự đầu tiên trong mảng) và int count(số ký tự trong mảng). Khi một chuỗi con được tạo trong JDK 6, mảng ký tự không được sao chép vào đối tượng Chuỗi mới . Thay vì điều này, cả hai Đối tượng lưu trữ một tham chiếu đến cùng một Mảng ký tự. Tuy nhiên, Đối tượng thứ hai lưu trữ thêm hai biến, ký hiệu đầu tiên của chuỗi con và biến thứ hai là về số lượng ký hiệu trong chuỗi con. Phương pháp JDK 6 đã được thay thế do sự cố rò rỉ bộ nhớ. Nó có nghĩa là gì? Giả sử chúng ta có một chuỗi xvà chúng ta tạo một vài chuỗi con bằng cách sử dụng chuỗi con.
String x = "CodeGymIsTheBest";
String y = x.substring (2,6);
String z = x.substring (0,3);
Bây giờ chúng ta có một đối tượng x được lưu trữ trong một vùng bộ nhớ đặc biệt được gọi là heap và hai đối tượng yz tham chiếu đến cùng một đối tượng x . Chỉ x đề cập đến các phần tử từ thứ hai đến thứ sáu và z đề cập đến các phần tử x từ 0 đến thứ ba. Điều gì sẽ xảy ra nếu đối tượng ban đầu x đã được sử dụng và không có bất kỳ tham chiếu nào trên đó? Trong một chương trình, tất cả các đối tượng khác chỉ hoạt động với yz . Trong trường hợp này, bộ thu gom rác có thể phá hủy đối tượng x, trong khi mảng bộ nhớ vẫn còn và nó được sử dụng bởi y và z. Rò rỉ bộ nhớ xảy ra. Vì vậy, phương pháp mới hơn, JDK 7 và phiên bản mới hơn, khá tốn kém về mặt sử dụng bộ nhớ. Tuy nhiên, nó cho phép bạn ngăn chặn rò rỉ bộ nhớ. Ngoài ra, phương thức mới hoạt động nhanh hơn vì nó không phải tính số lượng ký tự. Để củng cố những gì bạn đã học, chúng tôi khuyên bạn nên xem một video bài học từ Khóa học Java của chúng tôi
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào