Để 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);
	}
}
Advertisements