Lập trình Java cơ bản

Bài 21: String trong Java

Chuỗi (String) trong Java cung cấp nhiều khái niệm đa dạng giúp bạn thao tác và xử lý với chuỗi như so sánh, cắt, nối, tìm độ dài, thay thế, tìm chuỗi con, …. Trong Java, về cơ bản chuỗi là một đối tượng mà biểu diễn dãy các giá trị char. Một mảng các ký tự làm việc khá giống như chuỗi trong Java.

1. Cách khai báo

Lớp String cung cấp hàng loạt các phương thức để thao tác với các chuỗi. Nó cung cấp các phương thức khởi tạo (constructor) khác nhau. Dưới đây là 2 phương thức được dùng thường xuyên nhất:
Cách 1: Sử dụng String Literal
String literal được tạo ra bằng cách sử dụng 2 dấu nháy kép.
Ví dụ
String str = "BkitSoftware"
Mỗi khi bạo tạo một biến string literal, đầu tiên JVM sẽ kiểm tra xem giá trị đó đã tồn tại trong 1 nơi gọi là String Pool chưa. Nếu chuỗi này đã tồn tại trong Pool, thì giá trị của biến sẽ được tham chiếu đến instance đã được tạo ra trong Pool. Nếu chuỗi này không tồn tại trong Pool, một instance mới được tạo ra và đặt vào trong Pool.
Ví dụ:
String str1 = "BkitSoftware"
String str2 = "BkitSoftware"// sẽ không tạo ra instance mới
Bằng cách khai báo này, chương trình sẽ hiệu quả hơn trong việc sử dụng bộ nhớ bởi vì không có đối tượng mới nào được tạo khi mà nếu nó đã tồn tại trong Pool.
Cách 2: Sử dụng từ khóa new
Trong trường hợp này, JVM sẽ tạo một đối tượng mới như bình thường trong bộ nhớ Heap (không phải Pool) và hằng "xinchao" sẽ được đặt trong Pool. Biến sẽ tham chiếu tới đối tượng trong Heap (chứ không là Pool).
Ví dụ:
String s=new String("BkitSoftware");
Khai báo bằng cách này sẽ nhanh hơn so với cách thứ nhất vì không mất thời gian truy nhập vào String Pool mà tạo trực tiếp một ô nhớ mới trong bộ nhớ Heap. Tuy nhiên, do đó sẽ dẫn đến việc dư thừa ô nhớ.

2. So sánh 2 chuỗi

Chúng ta có thể so sánh chuỗi trong Java dựa trên cơ sở nội dung và tham chiếu. Nó được sử dụng trong sự xác nhận bởi phương thức equal(), sắp xếp bởi phương thức compareTo(), so khớp tham chiếu bởi toán tử ==, …
Cách 1: Sử dụng phương thức equal(), được sử dụng để so sánh nội dung của 2 chuỗi. Lớp String cung cấp 2 phương thức equals():
  • equal(): so sánh 2 chuỗi có phân biệt chữ hoa, chữ thường.
  • equalsIgnoreCase(): so sánh 2 chuỗi nhưng không phân biệt chữ hoa, chữ thường.
Ví dụ:
package com.company;

public class Main {
    public static void main(String args[]) {
        String str1 = "BkitSoftware";
        String str2 = new String("Bkitsoftware");
        System.out.println(str1.equals(str2));
        System.out.println(str1.equalsIgnoreCase(str2));
    }
}
false
true
Cách 2: Sử dụng toán tử "=="
Toán tử == được sử dụng để so sánh tham chiếu (không phải giá trị) của 2 chuỗi.
Ví dụ:
package com.company;

public class Main {
    public static void main(String args[]) {
        String str1 = "BkitSoftware";
        String str2 = str1;
        String str3 = new String("BkitSoftware");
        System.out.println(str1==str2);
        System.out.println(str1==str3);
    }
}
true// Do str1 và str2 cùng tham chiếu tới 1 instance
false// Do str1 và str3 tham chiếu tới 2 instance khác nhau
Cách 3: Sử dụng phương thức compareTo()
Phương thức compareTo () so sánh các giá trị theo thứ tự từ điển và trả về một giá trị số nguyên mô tả nếu chuỗi đầu tiên nhỏ hơn, bằng hoặc lớn hơn chuỗi thứ hai.
Giả sử s1 và s2 là hai biến chuỗi. Nếu:
  • s1 == s2 : 0
  • s1 > s2 : giá trị > 0
  • s1 < s2 : giá trị < 0
Ví dụ:
package com.company;

public class Main {
    public static void main(String args[]) {
        String str1 = "BkitSoftware";
        String str2 = str1;
        String str3 = new String("Code");
        System.out.println(str1.compareTo(str2));
        System.out.println(str1.compareTo(str3));
    }
}
0
-1

3. Các phương thức lớp String

Giả sử ta thao tác các lệnh trên chuỗi str="BkitSoftware"
Phương thức Mô tảVí dụ
chatAt()trả về giá trị Char của chuỗi tại vị trí có chỉ số index được chỉ định được chỉ định, bắt đầu từ 0str.charAt(0) sẽ trả về 'B'
compareTo()so sánh các chuỗi cho trước với chuỗi hiện tại theo thứ tự từ điển. Nó trả về số dương, số âm hoặc 0.Đã ví dụ ở phần so sánh
concat()nối thêm chuỗi được chỉ định vào cuối chuỗi đã cho.str = str.concat(" Company")
str sẽ trở thành BkitSoftware Company
contain()tìm kiếm chuỗi ký tự trong chuỗi này. Tìm thấy trả về true, ngược lại là false.str.contain("ware") trả về true
endsWith()kiểm tra nếu chuỗi này kết thúc với hậu tố nhất định.Trả về true nếu chuỗi này kết thúc với hậu tố đã cho, nếu khác thì trả về false.str.endsWith("ware") trả về true
equals()so sánh hai chuỗi đưa ra dựa trên nội dung của chuỗi.Đã ví dụ ở phần so sánh
equalsIgnoreCase()so sánh hai chuỗi đưa ra dựa trên nội dung của chuỗi không phân biệt chữ hoa chữ thường.Đã ví dụ ở phần so sánh
format()trả về một chuỗi được format theo miền địa phương.String str1 = String.format("Company is %s", str);
str1 sẽ là Company is BkitSoftware
getBytes()trả về mảng byte của chuỗi.byte[ ] barr = str.getBytes();
getChars()sao chép nội dung của chuỗi thành mảng Char cụ thể. Có 4 đối số truyền vào phương thức getChars().
indexOf()trả về chỉ số của giá trị ký tự đã cho hoặc chuỗi con. Nếu không tìm thấy trả lại giá trị -1. Chỉ số (index) được đếm từ 0.str.indexOf("B") trả về 0
intern()có thể được sử dụng để trả về chuỗi từ Pool chứa hằng số chuỗi khi nó được tạo bởi từ khóa new.
isEmpty()khi chuỗi trống trả về true, ngược lại trả về false.str.isEmpty() trả về true
join()trả về một chuỗi được nối với nhau bởi dấu phân tách. Trong phương thức join chuỗi, dấu phân cách được sử dụng cho mỗi chuỗi được nối.String str1 = String.join("-","Bkit","Software")
str1 là Bkit-Software
lastIndexOf()trả vể chỉ số cuối của ký tự hoặc chuỗi con. Nếu không tìm thấy trả về -1. Giá trị index được tính từ 0.str.lastIndexOf("e") trả về 11 
length()trả về độ dài của chuỗi (tổng số ký tự theo mã unicode).str.length() trả về 12
replace()sử dụng để thay thế tất cả các ký tự hoặc chuỗi cũ thành ký tự hoặc chuỗi mới.str.replace('B','C') trả về CkitSoftware
replaceAll()replaceAll() trả về một chuỗi thay thế tất cả các chuỗi ký tự phù hợp với regex.str.replace("B","C") trả về CkitSoftware
split()tách chuỗi này theo biểu thức chính quy(regular expression) và trả về mảng chuỗi.
startsWith()được sử dụng để kiểm tra tiền tố của chuỗi có khớp với giá trị tiền tố đã nhập không, nếu đúng trả về true, sai trả về false.str.startsWith("ware") trả về false
substring()trả về chuỗi con của một chuỗi.str.substring(1) trả về kitSoftware 
toCharArray()được sử dụng để chuyển đổi chuỗi thành các mảng ký tự. Nó trả về một mảng ký từ có độ dài tương đương độ dài của chuỗi.
toLowerCase()được sử dụng để chuyển chuỗi về dạng chữ thường.str.toLowerCase() trả về bkitsoftware
toUpperCase()được sử dụng để chuyển chuỗi về dạng chữ hoa.str.toUpperCase() trả về BKITSOFTWARE
trim()được sử dụng để xóa khoảng trẳng ở đầu và cuối chuỗi.
valueOf()được sử dụng để chuyển đối kiểu dữ liệu khác thành chuỗi.String.valueOf(11) trả về "11"

Danh sách bài học