CodeGym /Blog Java /Ngẫu nhiên /Các cách khác nhau để đảo ngược chuỗi trong Java
John Squirrels
Mức độ
San Francisco

Các cách khác nhau để đảo ngược chuỗi trong Java

Xuất bản trong nhóm
Chuỗi trong java cũng có thể được coi là một mảng các ký tự. Chuỗi trong java được sử dụng để lưu trữ văn bản/ký tự. Trong ngôn ngữ lập trình java, các chuỗi được coi là đối tượng. Trong Java, chuỗi là đối tượng của một lớp được xác định trước có tên là String. Tất cả các biến chuỗi đều là các thể hiện của lớp String trong java. Do đó chúng ta có thể hiểu rằng các chuỗi trong java không phải là kiểu nguyên thủy như int hay char trong các ngôn ngữ lập trình khác. Trong bài viết này, chúng ta sẽ đọc cách đảo ngược một chuỗi trong java. Điều kiện tiên quyết cho việc này là bạn phải biết cách tạo một chuỗi trong java và khái niệm cơ bản về các phương thức chuỗi sẵn có cũng như cách thực hiện các thao tác với sự trợ giúp của các vòng lặp.

Phạm vi của bài viết

- Trong bài viết này, chúng ta sẽ tìm hiểu về các cách khác nhau để đảo ngược chuỗi trong java. - Chúng ta cũng sẽ thấy một số phương thức dựng sẵn mà qua đó chúng ta có thể đảo ngược một chuỗi trong java. - Chúng ta cũng sẽ đọc về độ phức tạp về thời gian và không gian của từng phương thức đảo ngược trong java. - Có một số cách để đảo ngược một chuỗi trong Java, mỗi cách đều có ưu điểm và nhược điểm riêng. Trong bài viết này, chúng ta sẽ khám phá một số phương thức được sử dụng phổ biến nhất để đảo ngược chuỗi trong Java.

Giới thiệu

Chuỗi là đối tượng bất biến trong java, chuỗi chỉ là một chuỗi ký tự trong java. Chuỗi một dòng trong java được xác định bằng dấu ngoặc đơn trong khi chuỗi nhiều dòng trong java được xác định bằng dấu ngoặc kép, java có sẵn một số phương thức chuỗi, nhưng hôm nay trong bài viết này chúng ta sẽ đọc về các cách khác nhau để đảo ngược chuỗi trong java. Ngôn ngữ lập trình Java là một trong những ngôn ngữ lập trình được sử dụng rộng rãi nhất trên thế giới và nó được biết đến vì tính đơn giản và dễ sử dụng. Một trong những thao tác phổ biến nhất mà các lập trình viên thực hiện trên chuỗi là đảo ngược chúng. Trong bài viết này, chúng ta sẽ thảo luận về các cách khác nhau để đảo ngược chuỗi trong Java. Trước tiên, chúng ta hãy đọc về cách phổ biến nhất là sử dụng vòng lặp for trong java:

Đảo ngược chuỗi trong java bằng vòng lặp for:

Kỹ thuật này là một trong những cách đơn giản nhất để đảo ngược chuỗi trong Java bằng cách sử dụng vòng lặp for. Chúng ta có thể lặp qua các ký tự của chuỗi từ đầu đến cuối và thêm chúng vào một biến chuỗi mới. Đây là một ví dụ về cách đảo ngược chuỗi bằng vòng lặp for :
//in the above code we have reversed the string using a for loop in java
public class reverseofthestring {
  public static void main(String[] args) {

    String s1 = "java is fun";
      // we are creating the second string to store the reversed string and print it while iterating the for loop
    String s2 = "";

    for(int i = s1.length()-1; i>=0; i--)
    {
        // in the above line we have stored the reversed string by iterating the for loop from the last index and stored the value in the second string created s2.
      s2 = s2 + s1.charAt(i);
    }

    System.out.print("The reversed string of the '"+s1+"' is: " );
    System.out.println(s2);
  }
}
đầu ra
The reversed string of the s1 is:nuf si avaj
Trong đoạn mã trên, trước tiên chúng ta lấy đầu vào của một chuỗi có tên s1 và tạo một chuỗi trống s2, sau đó lặp lại vòng lặp for từ chỉ mục cuối cùng và sau đó chúng ta lưu trữ giá trị của từng ký tự trong chuỗi đó. Chạy đoạn mã trên trong trình soạn thảo của bạn để có giải thích rõ ràng và rõ ràng hơn. Độ phức tạp về thời gian của đoạn mã trên là O(N) và vì chúng ta đã lặp qua tất cả n phần tử nên độ phức tạp về không gian của đoạn mã trên là O(N). Bây giờ chúng ta hãy đọc về quy trình tiếp theo là đảo ngược chuỗi bằng cách sử dụng trình tạo chuỗi, vì vậy bây giờ chúng ta hãy đọc chi tiết về nó:

Đảo ngược chuỗi bằng lớp xây dựng chuỗi

Chúng ta cũng có thể đảo ngược chuỗi trong Java bằng cách sử dụng lớp StringBuilder. Lớp StringBuilder cung cấp phương thức Reverse() có thể được sử dụng để đảo ngược một chuỗi. Phương thức Reverse() của lớp Java StringBuilder được sử dụng để thay thế chuỗi ký tự này bằng chuỗi ký tự đảo ngược. Lớp StringBuilder trong java không có phương thức toCharArray(), trong khi lớp String có phương thức toCharArray(). Bây giờ chúng ta hãy hiểu với sự trợ giúp của một ví dụ:
public class reverseusingbuilder {
    public static void main(String[] args) {
        StringBuilder s1 = new StringBuilder("abc");
        System.out.println("The original string1 is  = " + s1);
        StringBuilder s2 = new StringBuilder("cab");
        System.out.println("The original string2 is = " + s2);
         StringBuilder s3 = new StringBuilder("wer");
        System. out.println("The original string3 is = " + s3);
        // reversing of stringbuilder
        System.out.println("The reverse of the string is reverse1 = " + s1.reverse());
        System.out.println("The reverse of the string2 is reverse2 = " + s2.reverse());
         System.out.println("The reverse of the string3 is reverse2 = " + s3.reverse());
    }
}
đầu ra
The original string1 is  = abc
The original string2 is  =cab
The original string3 is  =wer
The reversed string1 is  = cba
The reversed string2 is  = bac
The reversed string3 is  =rew
Trong phương thức này, chúng ta có thể thấy rằng bằng cách sử dụng lớp trình tạo chuỗi sẵn có, chúng ta đã đảo ngược chuỗi. Phương pháp này rất hiệu quả vì nó chỉ yêu cầu một lần truyền qua chuỗi. Tuy nhiên, nó yêu cầu tạo một đối tượng StringBuilder mới, điều này có thể bổ sung thêm một số chi phí. Phương pháp này tương đối đơn giản và dễ hiểu, nhưng nó có thể kém hiệu quả hơn các phương pháp khác vì nó yêu cầu phải chuyển chuỗi nhiều lần và tạo một chuỗi mới cho mỗi ký tự. Chạy đoạn mã trên trong trình soạn thảo của bạn để có giải thích rõ ràng và rõ ràng hơn. Bây giờ chúng ta hãy xem một cách khác để đảo ngược chuỗi bằng kỹ thuật đệ quy:

Đảo ngược chuỗi bằng đệ quy

Đệ quy là một kỹ thuật trong đó một hàm gọi chính nó. Chúng ta có thể sử dụng đệ quy để đảo ngược một chuỗi bằng cách chia nó thành các chuỗi con nhỏ hơn. Đệ quy trong java là một quá trình trong đó một phương thức gọi chính nó liên tục. Để đảo ngược chuỗi trong java bằng cách sử dụng đệ quy, trước tiên chúng ta phải xóa ký tự đầu tiên khỏi chuỗi rồi nối ký tự đó vào cuối chuỗi và sau đó chúng ta phải lặp lại bước trên cho đến khi chuỗi đầu vào trống. Bây giờ chúng ta hãy hiểu điều này với sự trợ giúp của một ví dụ:
public class reverse string
{
//in this line we are writing the recursive function to reverse a string
public String reverse string(String s1)
{
//first we will check if the string is empty or not
if(s1.isEmpty())
{
System. out.println("String is empty.")
//if the above condition is true then it returns the same string as if the string is empty itself then we cannot reverse the string
return s1;
}
else
{
return reverseString(s1.substring(1))+s1.charAt(0);
}
}
public static void main(String[] args)
{
reversestring q1 = new reversestring();
String res1 = q1.reverseString("JAVA IS FUN");
String res2 = q1.reverseString("STRINGS OBJECTS JAVA");
String res3 = q1.reverseString("IMMUTABLE CLASS OBJECTS");
System.out.println(res1);
System.out.println(res2);
System.out.println(res3);
}
}
đầu ra
NUF SI AVAJ
AVAJ STCEJBO SGNIRTS
STCEJBO SSALC ELBATUMMI
Do đó, chúng ta có thể thấy rằng ở trên, bằng cách sử dụng đệ quy, chúng ta đã đảo ngược chuỗi, trước tiên chúng ta kiểm tra xem chuỗi có trống hay không nếu chuỗi trống thì sẽ không có ký tự nào có thể đảo ngược được. Phương thức này có thể hiệu quả hơn phương thức vòng lặp for vì nó chỉ yêu cầu một lần truyền qua chuỗi. Tuy nhiên, nó cũng có thể phức tạp và khó hiểu hơn vì nó liên quan đến việc sử dụng đệ quy . Chạy đoạn mã trên trong trình soạn thảo của bạn để có giải thích rõ ràng và rõ ràng hơn. Chúng ta hãy xem một ví dụ khác về cách đảo ngược chuỗi bằng cách sử dụng đệ quy trong java:
public static String reverseusingrecursion(String s1) {
    if (s1.length() == 1) {
        return s1;
    }
    //We have applied recursion in this line
    return s1.charAt(s1.length() - 1) + reverseUsingRecursion(s1.substring(0, s1.length() - 1));
}
Bây giờ chúng ta hãy đọc về một cách khác để đảo ngược một chuỗi trong java sử dụng mảng:

Đảo ngược một chuỗi trong java bằng cách sử dụng một mảng

Chúng ta cũng có thể đảo ngược một chuỗi bằng cách chuyển đổi nó thành một mảng ký tự, thay đổi mảng đó rồi chuyển đổi lại thành một chuỗi. Đầu tiên, chúng ta phải tạo một mảng ký tự trống có cùng kích thước với mảng ký tự đã cho, sau đó chúng ta phải điền ngược vào mảng ký tự các ký tự của chuỗi đã cho, và cuối cùng chúng ta phải chuyển đổi mảng ký tự thành chuỗi bằng cách sử dụng phương pháp sao chép và trả lại nó. Bây giờ chúng ta hãy hiểu điều này với sự trợ giúp của một ví dụ:
public class Main
{
    // In this Method of conversion we have to reverse a string in Java using a character array
    public static String reverse(String s1)
    {
        // we have to check if the string is empty or not and return if the string is null or empty
        if (s1 == null || s1.equals("")) {
            return s1;
        }
 // if it is equal to empty then we will simply print the string and break it.
        // else we will find the string length
        int len = str.length();

        // and then we have to create a character array of the same size as that of the string to store the value after reversing
        char[] new_arr = new char[n];

        // and by iterating the loop backward we have to fill the character array backward with characters in the string
        for (int i = 0; i < len; i++) {
            new_arr[len - i - 1] = str.charAt(i);
        }

        // and in the final step after reversing we have to convert the character array to string and return it
        to return String.copy value of(new_arr);
    }

    public static void main(String[] args)
    {
        // taking a string input for reverse
        String s1 = "JAVA IS FUN";

        // In this line we are calling the reverse function and reversing the string
        str = reverse(str);

        System.out.println("The reversed string is " + s1);
    }
}
đầu ra
NUF SI AVA
Trong phương thức này, chúng ta phải đảo ngược chuỗi thành một mảng ký tự mà chúng ta đã biết nên trước tiên chúng ta sẽ kiểm tra xem chuỗi đó có trống hay không và trả về nếu chuỗi đó rỗng hoặc trống nếu nó bằng trống thì chúng ta sẽ chỉ cần in chuỗi đó và break else chúng ta sẽ tìm độ dài chuỗi và sau đó chúng ta phải tạo một mảng ký tự có cùng kích thước với chuỗi để lưu trữ giá trị sau khi đảo ngược và bằng cách lặp vòng lặp ngược, chúng ta phải điền ngược mảng ký tự bằng các ký tự trong chuỗi và ở bước cuối cùng sau khi đảo ngược chúng ta phải chuyển mảng ký tự thành chuỗi và trả về. Chạy đoạn mã trên trong trình soạn thảo của bạn để có giải thích rõ ràng và rõ ràng hơn. Bây giờ chúng ta hãy đọc về bước tiếp theo, chúng ta cũng có thể đảo ngược chuỗi trong java bằng API Stream. Vì vậy, bây giờ chúng ta hãy đọc chi tiết về chúng với sự trợ giúp của một số ví dụ:

Đảo ngược một chuỗi trong java bằng API Stream:

Java 8 đã giới thiệu API Stream có thể được sử dụng để thực hiện các thao tác kiểu chức năng trên các bộ sưu tập. Chúng ta có thể sử dụng API luồng để đảo ngược chuỗi bằng cách chuyển đổi chuỗi đó thành luồng ký tự, đảo ngược luồng rồi chuyển đổi lại thành chuỗi. Chúng ta có thể đảo ngược một chuỗi trong java bằng cách sử dụng nhiều luồng và bộ sưu tập khác nhau. Trước tiên, chúng ta phải nhập một chuỗi rồi sử dụng Bản đồ trên toàn bộ Chuỗi thành đối tượng StringBuilder, đồng thời đảo ngược nó bằng phương thức Reverse() của lớp StringBuilder và rồi Cuối cùng, thu thập Chuỗi đảo ngược bằng cách sử dụng Stream. phương thức Collect() và Collector. join(), chúng tôi sẽ in cả Chuỗi gốc/Đảo ngược cùng với độ dài của chúng. Bây giờ chúng ta hãy hiểu điều này với sự trợ giúp của một ví dụ:
public static String reverseUsingStream(String str) {
    return str. chars()
              .mapToObj(c -> (char) c)
              .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
              .reverse()
              .toString();
}
Trong ví dụ này, chúng tôi đã đảo ngược chuỗi trong java bằng cách sử dụng các luồng và bộ sưu tập java. Chạy đoạn mã trên trong trình soạn thảo của bạn để có giải thích rõ ràng và rõ ràng hơn. Bây giờ chúng ta hãy xem cách đảo ngược chuỗi bằng cách sử dụng ngăn xếp. Bây giờ chúng ta hãy đọc chi tiết về nó với sự trợ giúp của một ví dụ:

Đảo ngược chuỗi bằng cách sử dụng ngăn xếp

Có một cách khác để đảo ngược chuỗi trong Java đó là sử dụng ngăn xếp. Ý tưởng là đẩy từng ký tự của chuỗi đầu vào vào ngăn xếp và sau đó lấy các ký tự ra khỏi ngăn xếp để lấy chuỗi đảo ngược. Bây giờ chúng ta hãy đọc chi tiết hơn về nó với sự trợ giúp của một ví dụ:
public static String reverse string(String input) {
    Stack<character> stack = new Stack<>();
    for (int i = 0; i < input.length(); i++) {
        stack.push(input.charAt(i));
    }
    StringBuilder sb = new StringBuilder();
    while (!stack.isEmpty()) {
        sb.append(stack.pop());
    }
    return sb.toString();
}

</character>
Trong ví dụ trên, trước tiên chúng ta tạo một ngăn xếp trống, sau đó đảo ngược chuỗi và chèn các phần tử vào bên trong ngăn xếp. Phương pháp này đơn giản, dễ hiểu và hiệu quả. Chạy đoạn mã trên trong trình soạn thảo của bạn để có giải thích rõ ràng và rõ ràng hơn.

Phần kết luận

Phương thức đầu tiên là sử dụng lớp StringBuilder, lớp này có phương thức Reverse() tích hợp sẵn để trả về một chuỗi mới ngược lại với chuỗi gốc. Phương thức thứ hai là sử dụng vòng lặp for, trong đó chúng ta chuyển đổi chuỗi gốc thành mảng char và lặp qua mảng theo thứ tự ngược lại, gán các ký tự tương ứng cho một mảng char mới và cuối cùng tạo một chuỗi mới bằng mảng char đó. Phương pháp thứ ba là sử dụng đệ quy, trong đó chúng ta gọi hàm đệ quy và giải quyết vấn đề bằng cách nối ký tự đầu tiên của chuỗi với chuỗi con đảo ngược của các ký tự còn lại. Phương pháp thứ tư là sử dụng một mảng để đảo ngược một chuỗi trong java. Trong phương thức thứ năm, chúng tôi đã sử dụng API luồng và trình thu thập java để đảo ngược chuỗi và Trong phương thức cuối cùng, chúng tôi đã sử dụng ngăn xếp để đảo ngược chuỗi trong java. Mỗi phương pháp này đều có ưu điểm và nhược điểm, và việc lựa chọn phương pháp nào phụ thuộc vào yêu cầu cụ thể của bài toán và sở thích của người lập trình. Nhìn chung, các phương thức này thể hiện tính linh hoạt và linh hoạt của Java trong thao tác chuỗi.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION