Chuỗi ký tự trong Java là một trong các kiểu dữ liệu được sử dụng trong khi lập trình, tuy nhiên nó khác với các kiểu dữ liệu căn bản. Trong bài viết này, chúng ta sẽ tìm hiểu về dữ liệu kiểu chuỗi ký tự (String) trong Java, cách tạo và các phương thức khác nhau của String cùng với các ví dụ dẫn chứng.
Chuỗi ký tự (String)
Trong Java, một chuỗi ký tự là một tập hợp các ký tự. Ví dụ: “xin chào” là một chuỗi bao gồm các ký tự ‘h’, ‘e’, ‘l’, ‘l’ và ‘o’. Chúng ta sử dụng dấu nháy kép để biểu diễn một đối tượng kiểu chuỗi ký tự hay String trong Java.
Ví dụ:
1 |
String chuoi_ky_tu = "Xin chao tek4!"; |
Ở đây, chúng ta đã tạo một biến chuỗi có tên là chuoi_ky_tu. Biến được khởi tạo bằng kiểu dữ liệu String.
Chú ý: String trong Java không phải là kiểu dữ liệu căn bản như int, char, double. Thay vào đó, tất cả các chuỗi ký tự đều là đối tượng của một lớp đã được định nghĩa có tên là String. Và, tất cả các chuỗi ký tự đều là biểu hiện của lớp String.
Ví dụ:
1 2 3 4 5 6 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = "Xin chao!"; System.out.println(chuoi_ky_tu); } } |
Kết quả
1 |
Xin chao! |
Các thao tác với chuỗi ký tự
Lớp String cung cấp nhiều phương thức khác nhau để thực hiện các thao tác khác nhau với chuỗi ký tự. Chúng ta sẽ xem xét một số thao tác như sau.
1. Lấy độ dài của một chuỗi
Để tìm độ dài của một chuỗi, chúng ta sử dụng phương thức length().
Ví dụ:
1 2 3 4 5 6 7 8 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = "Xin chao!"; System.out.println(chuoi_ky_tu); int do_dai = chuoi_ky_tu.length(); System.out.println(do_dai); } } |
Kết quả:
1 2 |
Xin chao! 9 |
Trong ví dụ trên, phương thức length() sẽ thực hiện tính số lượng ký tự có trong chuỗi và trả về kết quả là một số nguyên.
2. Nối hai chuỗi ký tự
Chúng ta có thể nối hai chuỗi trong Java bằng phương thức concat().
Ví dụ:
1 2 3 4 5 6 7 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = "Xin chao "; String chuoi1 = chuoi_ky_tu.concat("Tek4"); System.out.println(chuoi1); } } |
Kết quả:
1 |
Xin chao Tek4 |
Ngoài ra, chúng ta cũng có thể nối hai chuỗi bằng cách sử dụng toán tử dấu cộng + trong Java.
Ví dụ:
1 2 3 4 5 6 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = "Xin chao "; System.out.println(chuoi_ky_tu + "Tek4"); } } |
Kết quả:
1 |
Xin chao Tek4 |
3. So sánh hai chuỗi
Trong Java, chúng ta có thể so sánh hai chuỗi ký tự bằng phương thức equals().
Ví dụ:
1 2 3 4 5 6 7 8 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = "Xin chao"; String chuoi_ky_tu2 = "Xin chao"; boolean kq = chuoi_ky_tu2.equals(chuoi_ky_tu); System.out.println(kq); } } |
Kết quả:
1 |
True |
Trong ví dụ trên, chúng ta đã so sánh 2 chuỗi ký tự và kết quả trả về là true. Phương thức equals() sẽ thực hiện kiểm tra nội dung của các chuỗi ký tự trong khi so sánh.
Chú ý: Chúng ta cũng có thể sử dụng toán tử == để so sánh 2 chuỗi.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = "Xin chao"; String chuoi_ky_tu2 = "Xin chao"; boolean kq = (chuoi_ky_tu2 == chuoi_ky_tu); System.out.println(kq); kq = chuoi_ky_tu.equals(chuoi_ky_tu2); System.out.println(kq); } } |
Kết quả:
1 2 |
True True |
Chú ý 2: Tuy nhiên, đối với đối tượng kiểu String, toán tử == sẽ kiểm tra xem tham chiếu đến các đối tượng String có giống nhau hay không. Phương thức equals() sẽ kiểm tra nội dung bên trong của 2 chuỗi.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = new String("Xin chao"); String chuoi_ky_tu2 = new String("Xin chao"); boolean kq = (chuoi_ky_tu2 == chuoi_ky_tu); System.out.println(kq); kq = chuoi_ky_tu.equals(chuoi_ky_tu2); System.out.println(kq); } } |
Kết quả:
1 2 |
False True |
Các phương thức sử dụng cho chuỗi ký tự
Bên cạnh những phương thức được đề cập ở trên, có nhiều phương thức làm việc với kiểu String khác nhau được tích hợp sẵn trong Java.
Phương thức | Mô tả |
substring() | Trả về một phần trong chuỗi ký tự. |
replace() | Thay thế ký tự trong chuỗi. |
charAt() | Trả về ký tự có trong chuỗi. |
getBytes() | Chuyển đổi chuỗi string sang các byte. |
indexOf() | Trả về vị trí của ký tự trong chuỗi. |
compareTo() | So sánh 2 chuỗi theo thứ tự từ điển. |
trim() | Loại bỏ các khoảng trắng. |
format() | Trả về một chuỗi được định dạng. |
split() | Biến đổi chuỗi thành một mảng các ký tự. |
toLowerCase() | Biến đổi thành chữ thường. |
toUpperCase() | Biến đổi thành chữ in hoa. |
toCharArray() | Biến đổi chuỗi thành một mảng ký tự |
Ký tự Escape
Giả sử chúng ta cần thêm dấu ngoặc kép bên trong một chuỗi. Ta muốn in ra chuỗi như sau:
1 |
Anh ay noi: "Toi ten la A" |
Nếu ta sử dụng đoạn mã sau, trình biên dịch sẽ báo lỗi:
1 |
String ky_tu_Escape = " Anh ay noi: "Toi ten la A""; |
Để giải quyết vấn đề này, ta sẽ sử dụng thêm dấu gạch chéo ngược (\) ở trước dấu ngoặc kép như sau:
1 |
String ky_tu_Escape = " Anh ay noi: \"Toi ten la A\""; |
Như vậy, ta có thể in ra được chuỗi ký tự như mong muốn. Vậy \” chính là một ký tự Escape trong Java.
Chuỗi ký tự là bất biến
Điều này có nghĩa là, khi chúng ta tạo một chuỗi ký tự được lưu trong một biến, chúng ta không thể thay đổi chuỗi ký tự của biến đó.
Ví dụ:
1 |
String chuoi_ky_tu = "Xin chao!"; |
Giả sử chúng ta muốn thêm đằng sau chuỗi ký tự “Xin chao!” với một chuỗi khác, ta sử dụng hàm concat():
1 |
chuoi_ky_tu = chuoi_ky_tu.concat(“abc”); |
Kết quả sẽ là biến chuoi_ky_tu sẽ lưu trữ một chuỗi “Xin chao!abc”. Điều này có vẻ như chúng ta đã thay đổi chuỗi trên, nhưng hoàn toàn không phải. Sau đây là cách hoạt động:
- JVM lấy ra chuỗi đầu tiên “Xin chao!”.
- Sau đó, nó tạo một chuỗi mới bằng cách thêm “abc” vào chuỗi đầu tiên.
- Và gán chuỗi mới “Xin chao!abc” cho biến chuoi_ky_tu.
- Tuy nhiên, chuỗi đầu tiên “Xin chao!” này là không bị thay đổi.
Tạo chuỗi ký tự bằng từ khóa new
Vì chuỗi ký tự trong Java là các đối tượng, chúng ta cũng có thể tạo chuỗi bằng cách sử dụng từ khóa new.
Ví dụ:
1 |
String chuoi_ky_tu = new String("Toi ten la tek4"); |
Trong ví dụ trên, chúng ta đã tạo một chuỗi ký tự bằng cách sử dụng từ khóa new. Ở đây, khi chúng ta tạo một đối tượng chuỗi ký tự, phương thức khởi tạo hay hàm tạo String() sẽ được gọi.
Chú ý: Lớp String cung cấp nhiều hàm tạo khác nhau để tạo chuỗi ký tự.
Ví dụ:
1 2 3 4 5 6 |
class Main { public static void main(String[] args) { String chuoi_ky_tu = new String("Toi ten la tek4"); System.out.println(chuoi_ky_tu); } } |
Kết quả:
1 |
Toi ten la tek4 |
Sự khác biệt giữa cách tạo bằng hằng ký tự và từ khóa new
Ví dụ:
1 2 |
String chuoi_ky_tu = new String("Xin chao"); // sử dụng từ khóa new String chuoi_ky_tu = "Xin chao"; // sử dụng hằng ký tự |
Trong Java, JVM duy trì một tập hợp các chuỗi để lưu trữ tất cả các chuỗi của nó bên trong bộ nhớ. Khi tạo chuỗi bằng cách sử dụng hằng ký tự, giá trị của chuỗi được tạo trực tiếp. Do đó, trình biên dịch trước tiên sẽ kiểm tra tập hợp các chuỗi để xem chuỗi được tạo đã tồn tại hay chưa. Nếu chuỗi đã tồn tại, một chuỗi mới sẽ không được tạo. Thay vào đó, một tham chiếu mới sẽ được sử dụng để trỏ đến chuỗi đã có. Nếu chuỗi ký tự là không tồn tại, một chuỗi mới sẽ được tạo.
Tuy nhiên, khi tạo chuỗi bằng từ khóa new, giá trị của chuỗi không được tạo trực tiếp. Do đó chuỗi mới sẽ được tạo bất cứ khi nào.
Trên đây là khái niệm và ví dụ cơ bản về chuỗi ký tự trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!