Tổng Hợp

Bài tập xử lý xâu kí tự String

Chuẩn hóa xâu trong Java, xóa khoảng trắng thừa, xử lý chuỗi trong java. Bài tập thao tác với xâu kí tự sử dụng một số hàm xử lý String như Split, trim, cắt chuỗi, tìm chuỗi con, đếm kí tự, từ . . .


1. Chuẩn hóa xâu là gì?

Khi nhắc đến việc xử lý chuỗi, thao tác với chuỗi thì việc chuẩn hóa xâu kí tự là việc làm trước hết mà bất kì người mới học lập trình nào cũng đều phải biết.

Chuẩn hóa xâu ở đây chính là việc xử lý một chuỗi (xâu kí tự) dạng String, char về một định dạng theo một quy chuẩn nào đó. Thường sẽ là xóa bỏ khoảng trắng dư thừa trong xâu. Chuẩn hóa thành định dạng tên riêng ( viết hoa chữ cái đầu) . . .

Ví dụ:

// Xâu chưa chuẩn hóa
String st = "    ***  welCoMe   to    taiLiEu.pro     **      ";

// Xâu sau thời điểm chuẩn hoát

st = "** Welcome To Tailieu.pro **"

Java là ngôn ngữ được nhận xét là xử lý chuỗi mạnh nhất. Nó có thư viện khủng với các phương thức giúp việc chuẩn hóa cực kì dễ dàng, mạnh hơn rất nhiều so với ngôn ngữ khác. Trong nội dung này mình sẽ cùng bạn tìm hiểu về nó nhé!


2. Giới thiệu bài toán

Đề bài mình sẽ tóm tắt lại như sau:
Xây dựng lớp ChuanHoaXau có tính chất là một xâu kí tự. Viết các phương thức cho phép

  • Nhập xâu từ keyboard, in xâu vừa nhập ra màn hình
  • Phương thức chuẩn hóa xâu theo quy tắc: Xóa bỏ khoảng trắng dư thừa, viết hoa kí tự trước hết của mỗi từ.
  • Phương thức đếm kí tự đặc biệt của xâu ( kí tự nhất là kí tự không phải chữ, không phải số)
  • Mở rộng xây dựng phương thức đếm số từ khởi đầu bằng kí tự “T”.

Phần cuối cùng của nội dung mình sẽ có full source code cho bài toán này nhé!


3. Chuẩn hóa xâu bằng Java

Phần nhập xâu, xuất xâu thì không có gì khó khăn. Giờ đây mình sẽ khắc phục phần chuẩn hóa xâu trước.


3.1 Xóa khoảng trắng thừa

Lớp String trong java có rất nhiều phương thức trợ giúp việc chuẩn hóa. Giả xử xâu ban đầu có định dạng là:

String st = "    ***  welCoMe   to    taiLiEu.pro     **      ";

Trước hết tất cả chúng ta sẽ sử dụng hàm trim(), phối hợp sử dụng hàm tolowercase(). Hàm trim() để xóa bỏ khoảng trắng ở đầu và cuối xâu st, hàm tolowercase() giúp biến toàn bộ các kí tự thành chữ thường.

Tiếp theo tất cả chúng ta sử dụng hàm replaceAll(“String1”, “String2”) . Hàm này sẽ sửa hết toàn bộ các String1 trong xâu st thành String2.

Xâu “s+” là một xâu đặc biệt trong Java. Xâu này là khái niệm cho xâu gồm toàn bộ các khoảng trắng liên tục. Tất cả chúng ta sẽ sửa nó thành một khoảng trắng ” ” là được.

public void chuannHoa() {
		st=st.trim().toLowerCase();
                st = st.replaceAll("s+", " ");

	}


3.2 Viết hoa chữ cái trước hết

Xong đoạn xóa khoảng trắng. Giờ đây đến đoạn biến các chữ cái đầu của mỗi từ thành chữ cái in hoa.

Cách khắc phục được nhiều người tiêu dùng nhất đó là: Tách xâu st thành các xâu con dựa vào các khoảng trắng. Sau đó viết hoa chữ cái trước hết của mỗi xâu con. Cuối cùng ghép lại thành xâu st ban đầu.

Để thực hiện tách, bạn cần khai báo một mảng String temp[] dùng để lưu trữ các xâu con.

Tiếp tục sử dụng một hàm cực kì bá đạo, hàm split(). Hàm này sẽ tác chuỗi thành các chuỗi con dựa vào kí tự truyền vào. Ở đây tất cả chúng ta sẽ tách các xâu con dựa vào dấu cách.

String[] temp= st.split(" ");

Sau đó ta tiến hành duyệt từng phần tử của mảng temp. và thực hiện câu lệnh

t+=String.valueOf(temp[i].charAt(0)).toUpperCase() + temp[i].substring(1)

Trong số đó:

  • Hàm String.valueOf() để biến một kí tự kiểu bất kì thành kiểu String. Ở cùng kiểu String thì mới cộng được các xâu lại với nhau, có hàm toUppercase().
  • Hàm temp[i].charAt(0) : Hàm để lấy một phần tử ở vị trí 0 của xâu temp thành kiểu char. Tất cả chúng ta phải dùng hàm này mới lấy được phần tử ở vị trí 0 của xâu con temp[i]
  • Hàm toUppercase() để biến kí tự trước hết thành chữ hoa
  • Hàm temp[i].substring(1) dùng để lấy toàn bộ các phần tử từ vị trí 1 đến cuối xâu temp[i]

Kết quả là ta đã viết hoa chữ cái trước hết của xâu temp[i].
Tiến hành duyệt mảng để thực hiện với mọi xâu temp[i]. Với mỗi phần tử duyệt xong ta đem cộng chúng với xâu st và một khoảng cách.

	public void chuannHoa() {
		st=st.trim().toLowerCase();
		st = st.replaceAll("s+", " ");
		String[] temp= st.split(" ");
                // sau thời điểm tách xong, gán xâu st thành sâu rỗng
		st="";
		for(int i=0;ivàlt;temp.length;i++) {
			st+=String.valueOf(temp[i].charAt(0)).toUpperCase() + temp[i].substring(1);
			if(ivàlt;temp.length-1) // nếu tempt[i] không phải từ cuối cùng
				st+=" ";   // cộng thêm một khoảng trắng
		}
	}

Văn phong của mình có thể hơi khó hiểu, bạn xem code cụ thể là hiểu ngay.


3.3 Hàm đếm các kí tự đặc biệt

Đây là một nội dung mở rộng cho bài toán của mình. Cách thực hiện rất đơn giản. Bạn chỉ cần cho vòng lặp duyệt từ phần tử trước hết đến phần tử cuối cùng của xâu.

	// Đếm kí tự đặc biệt tron xâu st
       public int demKTDB() {
		int ktDB =0;
		for(int i=0;ivàlt;st.length();i++)
			if(! Character.isLetterOrDigit(st.charAt(i)))
				ktDB+=1;
		return ktDB;
	}


3.4 Đếm từ khởi đầu bằng chữ cái bất kì

Ở đây mình sẽ đếm số từ khởi đầu bằng chữ “T”. Bạn cũng có thể ứng dụng để viết hàm tìm kiếm xâu con nhập vào từ keyboard . . .

Thuật toán rất đơn giản. Trước hết xác minh xem từ trước hết có phải từ khởi đầu bằng kí tự ‘T’ không. Nếu có tăng biến đếm thêm 1.

Tiếp theo tiến hành duyệt mảng từ vị trí 1 đến vị trí cuối cùng. Nếu ở vị trí i là ‘ ‘ và i +1 là kí tự ‘T’. Tiến hành tăng biến đếm.

// Hàm đếm từ xuất hiện bằng kí tự T.
	public int countLetter() {
		int letter =0;  // Biến đếm
                // Xác minh chữ trước hết
		if(st.charAt(0)=='T');
		    letter+=1;
		for(int i=1;ivàlt;st.length()-1;i++)
			if(st.charAt(i)==' ' && st.charAt(i+1)=='T')
				letter+=1;
		return letter;
	}


4. Chương trình hoàn chỉnh

Ghép lại các phần bên trên sau đó chỉnh sửa, thêm bớt một tí. Là có toàn bộ một chương trình hoàn chỉnh như phần dưới.

/* Github: https://github.com/duongdinh24/
 * @author by admin tailieu.pro
 * 
 * De bai:
 * Nhap vao xau, dem so ki tu dac biet ( isLetterOrDigit
 * Dem so tu bat dau bang ki tu T
 * Chuan hoa xau : xoa khoang trang thua, chu cai dau tien viet hoa
 */
import java.io.*;
import java.util.*;

public class ChuanHoaXau {
	private String st;
	public ChuanHoaXau(String s) {
		st=s;
	}
	
	public ChuanHoaXau() {}
	
//  Hàm nhập String từ keyboard có sử dụng try catch
	String nhapString() {
		String x;
		DataInputStream ip = new DataInputStream(System.in);
		try {
			x=ip.readLine();
		}
		catch(Exception e) {
			System.out.println("Nhap lai!");
			x=nhapString();
		}
		return x;
	}
	
	public void nhapXau() {
		System.out.println("Nhap xau: ");
		st=nhapString();
	}
	
	public void hienThi() {
		System.out.println(st);
	}
	
// Hàm đếm kí tự đặc biệt
	public int demKTDB() {
		int ktDB =0;
		for(int i=0;ivàlt;st.length();i++)
			if(! Character.isLetterOrDigit(st.charAt(i)))
				ktDB+=1;
		return ktDB;
	}

// Hàm chuẩn hóa xâu
	public void chuannHoa() {
		st=st.trim().toLowerCase();
		st = st.replaceAll("s+", " ");
		String[] temp= st.split(" ");
		st="";
		for(int i=0;ivàlt;temp.length;i++) {
			st+=String.valueOf(temp[i].charAt(0)).toUpperCase() + temp[i].substring(1);
			if(ivàlt;temp.length-1)
				st+=" ";
		}
	}

// Hàm đếm từ xuất hiện bằng kí tự T.
	public int countLetter() {
		int letter =0;
                // Xác minh chữ trước hết
		if(st.charAt(0)=='T');
		    letter+=1;
		for(int i=1;ivàlt;st.length()-1;i++)
			if(st.charAt(i)==' ' && st.charAt(i+1)=='T')
				letter+=1;
		return letter;
	}

// Hàm main()
	public static void main(String[] args) {
		ChuanHoaXau a = new ChuanHoaXau();  // khai báo đối tượng a thuộc class ChuanHoaXau
		a.nhapXau();   /// gọi phương thức nhập
		System.out.println("Xau co "+a.demKTDB()+" ky tu db!");  // Gọi phương thức đếm KTDB
		a.chuannHoa();   // Chuẩn hóa
		System.out.println("Xau sau khi chuan hoa: ");
		a.hienThi();

                // Gọi hàm đếm từ xuất hiện bằng chữ 'T'
		System.out.println("Co "+a.countLetter()+" tu xuat hien bang chu T!");
	}
}

Kết quả khi chạy chương trình trên

chuan hoa xau trong java

Lời cuối cùng mình gửi lời cảm ơn tới độc giả đã quan tâm tới nội dung này. Nếu có ý kiến thắc mắc hay đóng góp, để lại comment xuống phía dưới nội dung nhé!

By duongdinh24 admin tailieu.pro
Kỷ niệm sinh viên năm 3 ICTU học lập trình Java.
Thái Nguyên ngày 9/12/2020 ❤ ? ?.

Xem thêm bài viết thuộc chuyên mục: Kĩ Năng Sống

Xem Thêm :   Excel’s LEFT(), RIGHT() and MID() String/Text Functions

Xem thêm bài viết thuộc chuyên mục: Tổng Hợp
Xem thêm :  Bài tập phát âm s es ed có đáp án

Related Articles

Back to top button