Bài tập cắt chuỗi thành hai phần bất kỳ năm 2024

Viết chương trình tìm kiếm 1 kí tự xem có trong chuỗi không, nếu có xuất ra vị trí của từ chứ kí tự đó. (Vd: xâu a là “ho chi minh”: nhập ‘m’=>kết quả là 3)

Show
  • Viết 1 chương trình đếm một kư tự xuất hiện bao nhiêu lần trong chuỗi.(vd:xâu a nhập là “ho chi minh”, nhập ‘i’ =>kq: 2)### Nhập vào chuỗi s1 và s2, cho biết vị trí xuất hiện của chuỗi s2 trong s1.### Viết chương trình tìm kiếm tên trong chuỗi họ tên. Nếu có thì xuất ra là tên này đă nhập

    đúng, ngược lại thông báo là đă nhập sai.

    1. Viết chương đảo vị trí của từ đầu và từ cuối.

      Ví dụ: nhập “bo an co” xuat ra “co an bo”

      1. Viết hàm cắt chuỗi họ tên thành chuỗi họ lót và chuỗi tên.

        Ví dụ: chuỗi họ tên là:”Nguyễn Văn A” cắt ra 2 chuỗi là chuỗi họ lót:”NguyễnVăn”,chuỗi tên là:”A”

        1. Nhập một chuỗi bất kỳ, sau đó hỏi người dùng cần tách bắt đầu từ đâu trong chuỗi trở về sau.

          Ví dụ: Nhập chuỗi S1:”Trường Đại Học Tôn Đức Thắng”. Người nhập muốn tách bắt đầu từ chữ “Tôn” thì sẽ xuất ra chuỗi “Tôn Đức Thắng” ra màn hình

          1. Viết hàm kiểm tra xem chuỗi có đối xứng hay không?.### Viết hàm tra xem trong chuỗi có kí tự số hay không nếu có tách ra thành một mảng số riêng.### Nhập một chuỗi bất kì, yêu cầu nhập 1 kí tự muốn xóa. Thực hiện xóa tất cả những kí tự đó trong chuỗi.### Đổi các từ ở đầu câu sang chữ hoa và những từ không phải đầu câu sang chữ thường.

            Ví dụ: nGuYen vAN a đổi thành: Nguyen Van A

            1. Viết chương trình đảo ngược thứ tự các từ có trong chuỗi

              Ví dụ: Nhập: lap trinh bang ngon ngu c

              Xuất ra màn hình là: c ngu ngon bang trinh lap

              1. Cho chuỗi str, nhập vào vị trí vt và số kí tự cần xóa n, hăy xóa n kí tự tính từ vị trí vt trong chuỗi str.

                Nhập vào chuỗi str, chuỗi cần chèn strInsert và vị trí cần chèn vt. Hăy chèn chuỗi strInser vào chuỗi str tại vị trí vt.

                Hãy để chúng tôi phân tích từng điều này một cách riêng biệt khi chúng tôi chia nhỏ phần mô tả được đưa ra ở trên.

                1. Phương thức trả về một mảng các chuỗi. Phần khai báo chứa các từ sau: "Trong Java, phương thức split tách một chuỗi thành các chuỗi con." Phương thức thu thập các chuỗi con này thành một mảng trở thành giá trị trả về.
                2. Phương thức này có một tham số đầu vào chuỗi được gọi là regex . Một lần nữa, hãy nhớ lại mô tả: "tách một chuỗi thành các chuỗi con bằng cách sử dụng dấu phân cách được xác định bằng biểu thức chính quy." Tham số đầu vào regex là một biểu thức chính quy được áp dụng cho chuỗi gốc. Khi ký tự hoặc tổ hợp ký tự khớp nhau, chúng được coi là dấu phân cách.

                Bài tập cắt chuỗi thành hai phần bất kỳ năm 2024

                Sự phân chia của Java trong thực tế

                Bây giờ chúng ta hãy tiến gần hơn đến vấn đề. Hãy tưởng tượng chúng ta có một chuỗi từ. Ví dụ, như thế này:

                tôi yêu Java

                Chúng ta cần chia chuỗi thành các từ. Chúng tôi thấy rằng các từ trong chuỗi này được phân tách với nhau bằng dấu cách. Trong trường hợp này, một ký tự khoảng trắng là ứng cử viên hoàn hảo cho dấu phân cách của chúng ta. Mã để giải quyết nhiệm vụ của chúng tôi sẽ như thế này:

                  
                public class Main {  
                    public static void main(String[] args) {  
                        String str = "I love Java";  
                        String[] words = str.split(" ");  
                        for (String word : words) {  
                            System.out.println(word);  
                        }  
                    }  
                }  
                

                Đầu ra của phương thức chính sẽ là các dòng sau:

                tôi yêu Java

                Hãy xem thêm một vài ví dụ về cách thức hoạt động của phương thức split :

                Sợi dây dấu phân cách Kết quả của phương pháp"Tôi yêu Java" " " (ký tự khoảng trắng) { "Tôi" , "tình yêu" , "Java" }"192.168.0.1:8080" ":" { "192.168.0.1" , "8080" }"Đỏ, cam, vàng" "," { "Đỏ" , "cam" , "vàng" }"Đỏ, cam, vàng" ", " { "Đỏ" , "cam" , "vàng" }

                Lưu ý sự khác biệt giữa hai hàng cuối cùng trong bảng trên. Trong hàng thứ hai đến hàng cuối cùng, dấu phẩy được sử dụng làm dấu phân cách. Kết quả là khi chuỗi được tách ra, một số từ có dấu cách ở đầu. Ở hàng cuối cùng, chúng tôi đã sử dụng dấu phẩy và khoảng trắng làm dấu phân cách. Đó là lý do tại sao không có chuỗi con nào có khoảng trắng ở đầu trong mảng kết quả. Đây chỉ là một chi tiết tinh tế chứng tỏ tầm quan trọng của việc cẩn thận chọn đúng dấu phân cách.

                Dấu phân cách hàng đầu

                Đây là một sắc thái quan trọng khác. Nếu chuỗi ban đầu bắt đầu bằng dấu phân cách, thì phần tử đầu tiên của mảng kết quả sẽ là một chuỗi rỗng. Ví dụ, nó sẽ trông như thế này: Chuỗi gốc: " I love Java" Dấu phân cách: " " Mảng kết quả: { "", "I", "love", "Java" } Nhưng nếu chuỗi gốc kết thúc bằng dấu phân cách thì đúng hơn hơn là bắt đầu bằng một, thì kết quả sẽ khác: Chuỗi gốc: "I love Java " Dấu phân cách: " " Mảng kết quả: { "I", "love", "Java"

                  
                public class Main {  
                    public static void main(String[] args) {  
                        print("I love Java".split(" "));  
                        print(" I love Java".split(" "));  
                        print("I love Java ".split(" "));  
                        print(" I love Java ".split(" "));  
                    }
                    static void print(String[] arr) {  
                        System.out.println(Arrays.toString(arr));  
                    }  
                }  
                

                Đầu ra của phương thức chính sẽ như thế này:

                [Tôi, yêu, Java] [, tôi, yêu, Java] [Tôi, yêu, Java] [, tôi, yêu, Java]

                Một lần nữa, hãy chú ý đến thực tế là khi ký tự đầu tiên trong chuỗi gốc là ký tự phân cách, thì kết quả là phần tử đầu tiên trong mảng sẽ là một chuỗi rỗng.

                anh chị em quá tải

                Lớp String có một phương thức phân tách khác với chữ ký sau:

                  
                String[] split(String regex, int limit)  
                

                Phương thức này có một tham số giới hạn bổ sung : nó xác định số lần mẫu biểu thức chính quy sẽ được áp dụng cho chuỗi gốc. Xem các giải thích dưới đây:

                giới hạn > 0

                Mẫu được áp dụng giới hạn -1 lần. Hơn nữa, độ dài của mảng được trả về sẽ không vượt quá giá trị của tham số giới hạn . Phần tử cuối cùng của mảng sẽ là một phần của chuỗi theo sau vị trí cuối cùng mà dấu phân cách được tìm thấy. Ví dụ:

                  
                public class Main {  
                    public static void main(String[] args) {  
                        print("I love Java".split(" ", 1));  
                        print("I love Java".split(" ", 2));  
                        /*  
                         Output:   
                         [I love Java]  
                         [I, love Java]  
                        */  
                    }
                    static void print(String[] arr) {  
                        System.out.println(Arrays.toString(arr));  
                    }  
                }  
                

                giới hạn < 0

                Biểu thức chính quy dấu phân cách được áp dụng cho chuỗi nhiều lần nhất có thể. Mảng kết quả có thể có độ dài bất kỳ. Ví dụ:

                  
                public class Main {  
                    public static void main(String[] args) {  
                        // Note the space at the end of the string  
                        print("I love Java ".split(" ", -1));  
                        print("I love Java ".split(" ", -2));  
                        print("I love Java ".split(" ", -12));  
                        /*  
                         Output:  
                        [I, love, Java, ]  
                        [I, love, Java, ]  
                        [I, love, Java, ]  
                        Please note that the last element of the array is  
                        an empty string. This is caused by the whitespace  
                        at the end of the original string.   
                        */  
                    }
                    static void print(String[] arr) {  
                        System.out.println(Arrays.toString(arr));  
                    }  
                }  
                

                giới hạn = 0

                Đối với trường hợp giới hạn < 0, mẫu dấu phân cách được áp dụng cho chuỗi nhiều lần nhất có thể. Mảng cuối cùng có thể có độ dài bất kỳ. Nếu các phần tử cuối cùng là các chuỗi rỗng, chúng sẽ bị loại bỏ khỏi mảng cuối cùng. Ví dụ:

                  
                public class Main {  
                    public static void main(String[] args) {  
                        // Note the space at the end of the string  
                        print("I love Java ".split(" ", 0));  
                        print("I love Java ".split(" ", 0));  
                        print("I love Java ".split(" ", 0));  
                        /*  
                         Output:  
                        [I, love, Java]  
                        [I, love, Java]  
                        [I, love, Java]  
                        Note the absence of empty strings at the end of the arrays  
                        */  
                    }
                    static void print(String[] arr) {  
                        System.out.println(Arrays.toString(arr));  
                    }  
                }  
                

                Nếu chúng ta xem qua việc triển khai phiên bản một tham số của phương thức phân tách , thì chúng ta có thể thấy rằng nó giống như người anh em bị quá tải của nó, nhưng với đối số thứ hai được đặt thành 0:

                  
                    public String[] split(String regex) {  
                        return split(regex, 0);  
                    }  
                

                ví dụ khác nhau

                Trong thực tế, đôi khi chúng ta có các chuỗi được tạo theo các quy tắc nhất định. Một chuỗi như vậy có thể xuất hiện trong chương trình của chúng ta từ bất cứ đâu:

                • từ dịch vụ của bên thứ ba;
                • từ một yêu cầu được gửi đến máy chủ của chúng tôi;
                • từ một tệp cấu hình;
                • và như thế.

                Trong những tình huống này, lập trình viên thường biết "luật chơi". Giả sử một lập trình viên biết rằng họ đang xử lý thông tin người dùng được lưu trữ theo mẫu này:

                user_id|user_login|user_email

                Hãy lấy một số giá trị cụ thể làm ví dụ:

                135|bender|[email protected]

                Giả sử nhiệm vụ của lập trình viên là viết một phương thức gửi email cho người dùng. Lập trình viên có quyền truy cập vào dữ liệu người dùng, được ghi lại ở định dạng nêu trên. Nhiệm vụ con mà bây giờ chúng ta sẽ tiếp tục phân tích là cách tách địa chỉ email khỏi phần còn lại của dữ liệu người dùng. Đây là một trường hợp mà phương pháp tách có thể hữu ích. Rốt cuộc, nếu chúng ta nhìn vào mẫu dữ liệu người dùng, chúng ta sẽ nhận ra rằng việc trích xuất địa chỉ email của người dùng từ phần còn lại cũng đơn giản như gọi phương thức phân tách để phân tách chuỗi. Sau đó, địa chỉ email sẽ nằm trong phần tử cuối cùng của mảng kết quả. Dưới đây là một ví dụ về phương pháp lấy một chuỗi chứa dữ liệu người dùng và trả về địa chỉ email của người dùng. Để đơn giản, giả sử rằng chuỗi dữ liệu luôn ở định dạng mà chúng ta muốn:

                  
                public class Main {  
                    public static void main(String[] args) {  
                        String userInfo = "135|bender|[email protected]";  
                        System.out.println(getUserEmail(userInfo));  
                        // Output: [email protected]  
                    }
                    static String getUserEmail(String userInfo) {  
                        String[] data = userInfo.split("\\|");  
                        return data[2]; // or data[data.length - 1]  
                    }  
                }  
                

                Lưu ý dấu phân cách: "\\|" . Trong biểu thức chính quy, "|" là một ký tự đặc biệt có ý nghĩa đặc biệt, vì vậy nếu chúng ta muốn sử dụng nó một ký tự bình thường (tức là thứ chúng ta muốn tìm trong chuỗi gốc), thì chúng ta cần thoát ký tự bằng hai dấu gạch chéo ngược. Hãy xem xét một ví dụ khác. Giả sử chúng ta có thông tin đặt hàng được cấu trúc như sau:

                mặt_hàng_1,tên_mặt_hàng_1,giá_mặt_hàng_1;số_mặt_hàng_2,tên_mặt_hàng_2,giá_mặt_hàng_2;...;số_mặt_hàng_n,tên_mặt_hàng_n,giá_n_mặt_hàng