[Java]Chuẩn hóa xâu trong Java – Standardize string in java
Để chuẩn hóa xâu trong Java, chúng ta cần xóa các khoảng trắng thừa ở đầu, cuối và giữa xâu.
Trước tiên chúng tay hãy xóa các khoảng trắng ở đầu và cuối bằng phương thức trim().
VD ta có:
String str = " nguyen van quan 7826 "; str = str.trim();
Khi đó
str = "nguyen van quan 7826"
Tiếp theo công việc của chúng ta sẽ là cắt bỏ các khoảng trắng thừa ở giữa xâu. Để làm việc này có nhiều cách, ở đây tôi nêu ra 2 cách cơ bản:
Cách 1:
while (str.indexOf(" ") != -1) str = str.replaceAll(" "," ");
+/ s1.indexOf(s2) : phương thức trả về vị trí của s2 trong s1.
+/ s.replaceAll(s1,s2) : phương thức thay thế tất cả chuỗi s1 thành s2 trong s. nhưng chỉ duyệt chuỗi s 1 lần. Vì vậy ta cần kết hợp cả vòng while để có thể thay thế tất cả.
Cách 2:
str = str.replaceAll("\\s+", " ");
Chương trình minh họa
class java_chuanhoaxau { public static void main(String[] sgr) { String str = " nguyen van quan 7826 "; str = str.trim(); str = str.replaceAll("\\s+"," "); System.out.println(str); } }
=== update ===
Như trên chúng ta đã chuẩn hóa được chuỗi bằng cách xóa bỏ các khoảng trắng vô nghĩa. Bây giờ ta sẽ chuẩn hóa các từ mà sẽ viết hoa đầu từ kiểu như các danh từ riêng (Hà Nội, Việt Nam hoặc Nguyễn Văn Quân, …)
Để làm điều này thì trước tiên chúng ta cứ chuẩn hóa bình thường như trên đã. Bước tiếp theo là viết hoa các ký tự đầu tiên của mỗi từ. Ta sử dụng phương thức split() để tách xâu thành mảng các từ. Sau đó dùng String.valueOf().toUperCase() để viết hoa ký tự đầu tiên mỗi từ cuối cùng là nối với các ký tự còn lại của chúng bằng substring(1).
Vậy là đã có mảng các từ viết hoa, tiếp theo là nối các từ lại với nhau và cách nhau 1 dấu cách.
package vietSource.net; public class ChuanHoaXau { public String chuanHoa(String str) { str = str.trim(); str = str.replaceAll("\\s+", " "); return str; } public String chuanHoaDanhTuRieng(String str) { str = chuanHoa(str); String temp[] = str.split(" "); str = ""; // ? ^-^ for (int i = 0; i < temp.length; i++) { str += String.valueOf(temp[i].charAt(0)).toUpperCase() + temp[i].substring(1); if (i < temp.length - 1) // ? ^-^ str += " "; } return str; } public static void main(String[] sgr) { String str = " nguyen van quan 7826 "; ChuanHoaXau chx = new ChuanHoaXau(); str = chx.chuanHoaDanhTuRieng(str); System.out.println(str); } }
😀 hôm nay cô giáo dạy hướng đối tượng bọn em dùng bài code này của anh để hướng dẫn :v vẫn để nguyên là nguyễn văn quân 7826 :v :v
good…
Nếu ở giữa có nhiều hơn 1 dấu cách thì hàm split này có vẻ k ổn ạ!
Trước khi split thì đã chuẩn hóa để xóa hết các dấu cách thừa rồi nhé.
cho mình hỏi mấy cái ký tự \\s+ có ý nghĩa như thế nào? xin cảm ơn
Nó là ký hiệu regular, một tập ký hiệu đại diện cho quy tắc nào đó. Ở đây là ký tự trắng.
Cho em hỏi đoạn phương thức main có sgr là sao ạ, bởi vì em thường thấy là args.. em nghĩ đó là khuôn mẫu. Em mới học Java được hai tuần ạ!
Nó chỉ là tên biến thôi.
Cảm ơn bài viết của anh, em đang đau đầu vì k biết xóa khoảng trắng giữa ntn
anh oi the vd ten: ” tr88a6n min123h q212uy ”
out put “Tran Minh Quy” lam ntn a?
Cái này tùy vào quy tắc và bộ gõ để có cách xử lý. Mình chưa xử lý như thế bao giờ.
cho em hỏi dòng if có ý nghĩa gì ạh
if là điều kiện để là gì đó.
Anh cho em hỏi đoạn “!=-1” trong dòng “while (str.indexOf(” “) != -1) str = str.replaceAll(” “,” “);” này có nghĩa là gì vậy ạ
str.indexOf(” “) -> tìm vị trí khoảng trắng trong str, nếu != -1 nghĩa là có. =-1 là ko có.
cái s=” ” ; để làm gì vậy ạ