String trong java với ví dụ cụ thể

String là một chuỗi các ký tự kết hợp lại. Ví dụ “Deft” là một chuỗi gồm 3 ký tự ‘D’, ‘e’, ‘f’, ‘t’ kết hợp lại.

String java trong java là một object immutable, nghĩa là bạn khônng thể thay đổi giá trị của string khi nó đã được khởi tạo.

Khởi tạo String trong java

Trong java chúng ta có 2 cách để tạo một chuỗi

  1. Chuỗi ký tự 
  2. Sử dụng từ khoá new

Tạo string bằng một chuỗi ký tự

public class Main {
    public static void main(String[] args) {
        String str1 = "shareprogrammimg";
        String str2 = "shareprogramming";
    }
}

Mình đã khởi tạo 2 chuỗi str1str2 có chuỗi ký tự hoàn toàn giống, sử dụng phép gán để khởi tạo một chuỗi, điều này không giống như việc khởi tạo một object đâu nhé(khởi tạo một object ra sao thì mình sẽ nói ở phần sau nha, các bạn cố gắng theo dõi).

Sau khi khởi tạo str1 thì chuỗi “shareprogrammimg” sẽ được lưu vào vùng nhớ heap tại string pool. Đến khi khởi tạo khởi str2, việc đầu tiên là tìm kiếm trong string pool, nếu đã có chuỗi tương tự thì sẽ không cần khởi tạo thêm mà gán thẳng cho str2, nếu không thì mới bắt đầu khởi tạo.

Quay trở lại với đoạn code ở trên của chúng ta. Mình sẽ giải thích từng bước:

B1: str1 = “shareprogramming” => JVM thấy rằng trong string pool chưa có object string nào có giá trị tương tự cho nên trình biên dịch sẽ tiến hành tạo ra object string (new String(“shareprogramming”) và gán cho str1.

B2: str2 = “shareprogramming” => JVM thấy rằng trong string pool đã có sẵn object string có giá trị tương tự nên trình biên dịch sẽ gán thẳng cho str2 mà không khởi tạo nữa.

Khởi tạo string bằng từ khoá new

Đây là cách chính thống đây các bạn, sử dụng từ khoá new. Lưu ý nếu như chúng ta khởi tạo chuỗi bằng từ khoá new thì trình biên dịch sẽ không tiến hành kiểm tra trong string pool có tồn tại object nào có giá trị như vậy chưa mà nó sẽ tiến hành khởi tạo cả 2 object cho dù nó có cùng giá trị nhé.

public class Main {

    public static void main(String[] args) {
        String str1 = new String("shareprogrammimg");
        String str2 = new String("shareprogrammimg");
    }
}

Với đoạn code trên thì chúng ta sẽ được 2 object riêng biệt không liên quan gì nhau hết nha các bạn.

String là object immutable

Nảy giờ nói nhiều về object immutable không biết nó có ảnh hưởng gì khi chúng ta làm việc với String không nhỉ? 

Như mình nêu ở trên object immutable thì chúng ta sẽ không thể thay đổi khi nó đã được khỏi tạo. 

Chúng ta cùng xem đoạn code sau

public class Main {

    public static void main(String[] args) {
        String str = "hello";

        System.out.println(str);

        str = "hello shareprogramming";

        System.out.println(str);
    }
}

Output: 

hello
hello shareprogramming

Ôi nhìn output sao mà kỳ quá vậy? sao mình nói object string không thể thay đổi sau khi nó đã được khởi tạo thì đáng lẽ chúng ra phải nhận output là hello hello chứ nhỉ!

Um hử, như vậy nè, để mình nói cho nghe. Khi bạn gán str = “hello” trình biên dịch sẽ tiến hành khởi tạo object string và gán cho str. Đến khi bạn lại gán str = “hello shareprogramming” như đúng bản chất nó không thay đổi giá trị object “hello” mà nó sẽ tạo tạo một object mới với giá trị chuỗi là “hello shareprogramming” và gán lại cho str. Đó là lý do chúng ta có output như trên.

Các method thường sử dụng của String 

1, int length(): Trả về số lượng ký tự trong chuỗi

String s = "shareprogramming.net";
System.out.println(s.charAt(10)); // return "a"

3, String substring(int i): Trả về chuỗi con bắt đầu tại vị trí i đến cuối chuỗi

String s = "shareprogramming.net";
System.out.println(s.substring(17)); // return "net"

4, String substring(int begin, int end): Trả về chuỗi con từ vị trí begin đến end

String s = "shareprogramming.net";
System.out.println(s.substring(5, 16)); // return "programming"

5, String concat(String s): Nối chuối s vào cuối chuỗi

String s = "shareprogramming.net";
System.out.println(s.indexOf("program")); // return 5

6, indexOf(String str, int fromIndex): Trả về vị trí xuất hiện đầu tiên của str bắt đầu từ vị trí fromIndex

String s = "shareprogramming.net";
System.out.println(s.indexOf("g", 10)); // return 15

7, lastIndexOf(String str): Trả về vị trí xuất hiện cuối cùng của str

String s = "shareprogramming.net";
System.out.println(s.lastIndexOf("g")); // return 15

8, lastIndexOf(String str, int fromIndex): Trả về vị trí cuối cùng xuất hiện của chuỗi str trong khoảng 0 đến fromIndex

String s = "shareprogramming.net";
System.out.println(s.lastIndexOf("g", 10)); // return 8

9, boolean equals(Object obj): So sánh với string obj

String s = "shareprogramming.net";
System.out.println(s.equals("shareprogramming.net")); // return true

10, boolean equalsIgnoreCase(String str): So sánh với chuỗi str, bỏ qua ký tự hoa thường

System.out.println(s.equalsIgnoreCase("shareprogramming.net")); // return true
        System.out.println(s.equalsIgnoreCase("SHAREPROGRAMMING.NET")); // return true

11, String toLowerCase(): Chuyển tất cả các ký tự thành ký tự thường.

String s = "ShareProgramming.net";
System.out.println(s.toLowerCase()); // return "shareprogramming.net"

12, String toUpperCase(): Chuyển tất cả các ký tự thành ký tự hoa

String s = "ShareProgramming.net";
System.out.println(s.toUpperCase()); // return "SHAREPROGRAMMING.NET"

13, String trim(): Xoá các khoảng trắng ở đầu và cuối chuỗi

String s = "  ShareProgramming.net  ";
System.out.println(s.trim()); // return "ShareProgramming.net"

14, String replace(char old, char new): thay thế các ký tự old thành new

String s = "ShareProgramming.net";
System.out.println(s.replace("g", "*")); // return "SharePro*rammin*.net"

Ở trên là các method chúng ta thường sử dụng trong String, ngoài ra nó còn có rất nhiều method khác nữa nhé.

Bài tập thực hành

1, Viết chương trình java tìm ký tự tại vị trí index, index được nhập vào từ bàn phím.

2, So sánh str1 với str2, nếu str1 lớn hơn str2 xuất ra “ok”, nhỏ hơn “ko”, bằng nhau thì xuất ra “equals”.

3, Tìm một chuỗi con trong chuỗi cha. Nếu có in ra true, ngược lại false.

4, Nối 2 chuỗi str1 và str2 sau đó in ra màn hình. str1, str2 nhập từ bàn phím

Bài tham khảo

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        /* 1, Viết chương trình java tìm ký tự tại vị trí index, index được nhập vào từ bàn phím. */

        String s = "shareprogramming";
        System.out.print("Nhap vi tri can tim: ");
        int index = scanner.nextInt();
        System.out.println(s.charAt(index));

        /* 2, So sánh str1 với str2, nếu str1 lớn hơn str2 xuất ra "ok", nhỏ hơn "ko", bằng nhau thì xuất ra "equals". */

        String str1 = "shareprogramming";
        String str2 = "hello";

        int check = str1.compareTo(str2);
        if (check == 1) {
            System.out.println("ok");
        } else if (check == -1) {
            System.out.println("ko");
        } else {
            System.out.println("equals");
        }


        /* 3, Tìm một chuỗi con trong chuỗi cha. Nếu có in ra true, ngược lại false. */

        System.out.println(str1.contains("programming"));


        /* 4, Nối 2 chuỗi str1 và str2 sau đó in ra màn hình. str1, str2 nhập từ bàn phím */

        // Khi chuyen nextInt sang nextLine cac ban nho them dong ben duoi khong thoi no se bo qua buoc nhap chuoi 1 nhe
        scanner.nextLine();
        
        System.out.print("Nhap chuoi str1: ");
        String s1 = scanner.nextLine();
        System.out.print("Nhap chuoi str2: ");
        String s2 = scanner.nextLine();
        System.out.println(s1.concat(s2));

    }
}

Nguồn tham khảo 

https://www.geeksforgeeks.org/strings-in-java/

https://www.edureka.co/blog/java-string/

Java String

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x