Khi nghĩ đến string (chuỗi), bạn có thể thấy mèo chơi với bóng len. Đúng là bóng len là string, nhưng khi lập trình viên dùng từ string, họ chỉ thứ khác.
Trong lập trình, string là chuỗi một hoặc nhiều ký tự. Vì dữ liệu dựa trên văn bản quan trọng đến nhường nào trong tương tác hàng ngày với máy tính, sẽ không ngạc nhiên string là phần quan trọng của lập trình.
Trong hướng dẫn này, chúng ta sẽ thảo luận cách tạo string, cách nối chuỗi (concatenate), và cách lưu giá trị string trong biến. Chúng ta sẽ đi qua vài ví dụ để hướng dẫn bạn.
Tạo chuỗi Java (Creating a Java String)
String dùng để lưu văn bản trong Java. Trong khi kiểu dữ liệu char lưu ký tự đơn lẻ, string có thể giữ bao nhiêu ký tự tùy ý. String là chuỗi các byte.
String định nghĩa giữa dấu ngoặc kép. Điều này khác别像 Python hay JavaScript, chấp nhận cả ngoặc đơn và kép. Đây là ví dụ string trong Java:
"This is an example string."
Bạn có thể in nội dung string dùng hàm println():
System.out.println("This is an example string."); Mã trả về: This is an example string. Chúng ta đã xây dựng string mới. Bây giờ bạn biết cách khai báo string, chúng ta nói về cách làm việc với chúng trong mã.
Nối chuỗi (String Concatenation)
Concatenation (nối chuỗi), từ dài thế. Định nghĩa khá đơn giản: nghĩa là kết hợp hai string tạo string mới. Bạn có thể dùng toán tử + (dấu cộng) để nối hai string.
Giả sử chúng ta có hai string: William và Carter. String đầu là tên, string sau là họ. Chúng ta có thể kết hợp dùng +:
String fullname = "William" + "Carter"; System.out.println(fullname);
Mã xuất ra: WilliamCarter. Chờ, gì xảy ra? Tại sao không có khoảng trắng giữa hai từ?
Mặc định, không có khoảng trắng thêm giữa string nối. Nếu muốn khoảng trắng xuất hiện, cần thêm sau tên William:
String fullname = "William " + "Carter"; System.out.println(fullname);
Khi chạy chương trình, trả về: William Carter.
Tính độ dài chuỗi (Calculating the Length of a String)
Làm sao tính độ dài string? Câu hỏi hay. May mắn cho chúng ta, không cần viết hàm phức tạp.
Java đã có hàm built-in tính độ dài string: length(). Tên phương thức thuận tiện!
Chúng ta tạo chương trình tính độ dài tên hai người trong lớp bốn. Tạo file Java mới và dán mã sau vào lớp chính:
String name1 = "William Carter"; String name2 = "Helena Ohara"; int name1length = name1.length() - 1; int name2length = name2.length() - 1; System.out.println(name1 + "'s name is " + name1length + " letters long."); System.out.println(name2 + "'s name is " + name2length + " letters long.");
Chạy mã:
William Carter's name is 13 letters long. Helena Ohara's name is 11 letters long.
Chúng ta định nghĩa hai biến lưu tên học sinh: name1 và name2. Chúng ta dùng phương thức length() tính độ dài từng chuỗi. Trừ 1 từ độ dài mỗi tên để tính khoảng trắng ở giữa.
Sau đó, in thông báo báo độ dài mỗi tên.
Tìm chuỗi trong chuỗi (Find a String within a String)
Có lúc bạn muốn tìm chuỗi trong chuỗi khác. Đó là nơi phương thức indexOf() hữu ích. Phương thức này trả về vị trí lần xuất hiện đầu tiên của chuỗi văn bản cụ thể trong chuỗi.
Trước khi thảo luận cách hoạt động, chúng ta nói sơ qua về index (chỉ mục). Trong Java, string được lập chỉ mục dùng số chỉ mục. Nghĩa là mỗi ký tự trong string được gán số riêng, dùng để truy cập từng mục riêng lẻ.
Đây là phân tích chỉ mục trong chuỗi "William Carter":
| W | i | l | l | i | a | m | C | a | r | t | e | r | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Lưu ý tất cả ký tự trong chuỗi được gán số chỉ mục, kể cả khoảng trắng. Ngoài ra, lưu ý đếm từ 0. Điều này là vì string được lập chỉ mục từ 0.
Giả sử chúng ta muốn tìm chuỗi Carter xuất hiện ở đâu trong chuỗi này. Chúng ta làm được dùng phương thức indexOf() như sau:
String name = "William Carter"; int position = name.indexOf("Carter"); System.out.println("Carter appears starting at index value " + position); Mã trả về: Carter appears starting at index value 8. indexOf() trả về vị trí chỉ mục ký tự xuất hiện.
Kiểm tra hai chuỗi bằng nhau (Check Whether Two Strings Are Equal)
So sánh string xuất hiện thường xuyên trong lập trình. Nghĩ về khi nhập mật khẩu vào form đăng nhập. Ứng dụng làm gì? So sánh mật khẩu nhập với mật khẩu lưu trong cơ sở dữ liệu.
Giả sử chúng ta viết chương trình kiểm tra mật khẩu người dùng đúng hay không. Mở file Java mới và dán mã sau vào chương trình chính:
String entered_password = "Test123"; String saved_password = "Test12345"; boolean compare_passwords = entered_password.equals(saved_password); System.out.println("Does the entered password match the saved password? " + compare_passwords); Mã trả về:
Does the entered password match the saved password? false
Chương trình kiểm tra xem hai string chỉ định – entered_password và saved_password có bằng nhau không. Chúng ta dùng phương thức equals() kiểm tra. Phương thức trả về true nếu string bằng nhau; ngược lại, false.
Hãy đổi giá trị entered_password bằng saved_password:
String entered_password = "Test12345"; String saved_password = "Test12345"; ...
Khi chạy mã, chương trình trả về:
Does the entered password match the saved password? true
Cả hai string chỉ định khớp, nghĩa là phương thức equals() đánh giá true.
Ký tự đặc biệt (Special Characters)
String phải viết trong ngoặc kép. Điều này nghe như không vấn đề cho đến khi muốn bao gồm ngoặc kép trong chương trình. Sẽ trả về lỗi.
Cách giải quyết lỗi là dùng ký tự gạch chéo ngược (\\). Điều này biến ký tự ngay sau string thành ký tự đặc biệt. Xem ví dụ:
String statement = "Your order for \"Chocolate Chip Cookie x2\" was processed.";
String này hoạt động trong chương trình vì chúng ta chỉ định gạch chéo ngược trước mỗi ngoặc kép trong string. String trả về: Your order for Chocolate Chip Cookie x2 was processed.
Giờ chúng ta có vấn đề khác: nếu muốn dùng gạch chéo ngược trong string? Để làm vậy, viết hai gạch chéo ngược cạnh nhau:
String order_reference = "Your order reference is 202\\303."
Điều này trả về string: Your order reference is 202\303."
Có nhiều ký tự đặc biệt khác trong Java. Một hữu ích nhất bạn gặp là \n, hay xuống dòng (new line). Ký tự này tạo dòng mới trong string:
String order_reference = "Your order reference is: \n 202\\303."
String bằng:
Your order reference is:
202\303
Chuỗi tách thành hai dòng vì chỉ định ký tự xuống dòng sau phần is: của string.
Kết luận
String cho phép làm việc với dữ liệu dựa trên văn bản trong chương trình. String có thể giữ bất kỳ số ký tự nào, kể cả không ký tự.
Dùng phương thức string như indexOf() và equals(), bạn có thể thao tác nội dung string trong Java. Bây giờ bạn đã sẵn sàng làm việc với string trong Java như chuyên gia!