String (chuỗi) trong Java

0 phút đọc

String là một chuỗi các ký tự kết hợp lại. Ví dụ "thaycacac" là một chuỗi gồm 9 ký tự 't', 'h', 'a', 'y', 'c', 'a', 'c', 'a', 'c' kết hợp lại.

String trong java là một object immutable, nghĩa là bạn không 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

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

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

Ví dụ: khởi tạo 2 chuỗi string1 và string2 với giá trị giống nhau

public class Main {
  public static void main(String[] args) {
    String string1 = "Thaycacac";
    String string2 = "Thaycacac";
  }
}

Sau khi khởi tạo string1 thì chuỗi "Thaycacac" sẽ được lưu vào vùng nhớ heap tại string pool. Đến khi khởi tạo khởi string2, việc đầu tiên là tìm kiếm trong string2, 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 string2, nếu không thì mới bắt đầu khởi tạo.

Mình sẽ giải thích đoạn code này sẽ diễn ra như sau:

  • Bước 1: string1 = "Thaycacac" => 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("Thaycacac")) và gán cho string1.
  • Bước 2: string2 = "Thaycacac" => 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 string2 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("thaycacac");
    String str2 = new String("thaycacac");
  }
}

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

Như đã đề cập ở 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 ví dụ sau:

public class Main {
  public static void main(String[] args) {
    String str = "hello";
    System.out.println(str);
    str = "hello thaycacac";
    System.out.println(str);
  }
}

Kết quả

hello
hello thaycacac

Sao nói rằng 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 chứ nhỉ!

Thật ra là 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 thaycacac" 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 thaycacac" và gán lại cho str. Đó là lý do chúng ta có output như trên.

Các hàm thường sử dụng của String

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

String s = "kungfutech.edu.vn";
System.out.println(s.charAt(10)); // return "."

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

String s = "kungfutech.edu.vn";
System.out.println(s.substring(10)); // return "edu.vn"

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

String s = "kungfutech.edu.vn";
System.out.println(s.substring(10, 14)); // return "edu"

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

String s = "kungfutech.edu.vn";
System.out.println(s.indexOf("edu")); // return 11

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 = "kungfutech.edu.vn";
System.out.println(s.indexOf("h", 5)); // return 9

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

String s = "kungfutech.edu.vn";
System.out.println(s.lastIndexOf("g")); // return 15

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 = "kungfutech.edu.vn";
System.out.println(s.lastIndexOf("h", 5)); // return 9

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

String s = "kungfutech.edu.vn";
System.out.println(s.equals("kungfutech.edu.vn")); // return true

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

System.out.println(s.equalsIgnoreCase("kungfutech.EDU.VN")); // return true
System.out.println(s.equalsIgnoreCase("Kungfutech.edu.vn")); // return true

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

String s = "KUNGFUTECH.EDU.VN";
System.out.println(s.toLowerCase()); // return "kungfutech.edu.vn"

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

String s = "kungfutech.edu.vn";
System.out.println(s.toUpperCase()); // return "KUNGFUTECH.EDU.VN"

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

String s = "  kungfutech.edu.vn  ";
System.out.println(s.trim()); // return "kungfutech.edu.vn"

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

String s = "kungfutech.edu.vn";
System.out.println(s.replace("g", "*")); // return "kun*futech.edu.vn"

Ở 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 phương thức khác nữa nhé.

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào

Avatar TechMely Team
Được viết bởi

TechMely Team

Thế giới bạn không bước vào được thì đừng cố chen vào, làm khó người khác, lỡ dở mình, hà tất chứ?