Bài 6: Xử lý chuỗi trong Java

Xử lý chuỗi trong Java

1. Giới thiệu về Chuỗi trong Java

Trong Java, chuỗi (String) là một đối tượng đại diện cho một dãy các ký tự. Chuỗi là một phần quan trọng trong lập trình Java, được sử dụng trong hầu hết các ứng dụng, từ xử lý văn bản đến giao tiếp với cơ sở dữ liệu.

2. Phương thức xử lý chuỗi trong Java

Các phương thức phổ biến của lớp String trong Java bao gồm:


3. Giải thích về StringBuilderStringBuffer

StringBuilder

Ví dụ sử dụng StringBuilder:

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // Nối chuỗi
sb.insert(5, ",");    // Chèn dấu phẩy vào vị trí 5
sb.delete(5, 6);     // Xóa ký tự từ vị trí 5 đến 6
System.out.println(sb.toString()); // "Hello World"

StringBuffer

Ví dụ sử dụng StringBuffer:

StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World");
System.out.println(sbf.toString()); // "Hello World"

Sự khác biệt giữa StringBuilderStringBuffer:

Khi nào sử dụng:


4. Giải thích về StringTokenizer

StringTokenizer là một lớp trong Java dùng để phân tích chuỗi và tách nó thành các "token" (mảnh chuỗi con). Lớp này chủ yếu được sử dụng để tách chuỗi thành các phần nhỏ theo một bộ phân cách.

Cấu trúc của StringTokenizer:

Phương thức của StringTokenizer:

Ví dụ sử dụng StringTokenizer:

import java.util.StringTokenizer;

public class StringTokenizerExample {
    public static void main(String[] args) {
        String str = "Java,Python,C++,JavaScript";
        
        // Tạo StringTokenizer với dấu phân cách là dấu phẩy
        StringTokenizer st = new StringTokenizer(str, ",");
        
        // Duyệt qua các token
        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}

Kết quả:

Java
Python
C++
JavaScript

Lưu ý:


Tóm tắt:


Bài tập xử lý chuỗi trong java

1. Viết chương trình Java để đếm số lượng ký tự trong một chuỗi.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class CountCharacters {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String str = scanner.nextLine();
        
        System.out.println("Số lượng ký tự trong chuỗi: " + str.length());
    }
}

2. Kiểm tra chuỗi có phải là chuỗi đối xứng không

Viết chương trình kiểm tra xem một chuỗi có phải là chuỗi đối xứng (palindrome) hay không.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class Palindrome {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String str = scanner.nextLine();
        
        String reversed = new StringBuilder(str).reverse().toString();
        
        if (str.equals(reversed)) {
            System.out.println("Chuỗi là đối xứng (palindrome).");
        } else {
            System.out.println("Chuỗi không phải đối xứng.");
        }
    }
}

3. Đổi chữ hoa thành chữ thường và ngược lại

Viết chương trình để chuyển đổi các ký tự chữ hoa thành chữ thường và ngược lại trong chuỗi.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class ToggleCase {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String str = scanner.nextLine();
        
        StringBuilder result = new StringBuilder();
        
        for (char c : str.toCharArray()) {
            if (Character.isUpperCase(c)) {
                result.append(Character.toLowerCase(c));
            } else if (Character.isLowerCase(c)) {
                result.append(Character.toUpperCase(c));
            } else {
                result.append(c); // Giữ nguyên ký tự không phải chữ cái
            }
        }
        
        System.out.println("Chuỗi sau khi chuyển đổi: " + result.toString());
    }
}

4. Xóa tất cả ký tự trắng (spaces) trong chuỗi

Viết chương trình để xóa tất cả các ký tự trắng (spaces) trong chuỗi.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class RemoveSpaces {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String str = scanner.nextLine();
        
        String result = str.replace(" ", "");
        System.out.println("Chuỗi sau khi xóa các ký tự trắng: " + result);
    }
}

5. Đếm số lần xuất hiện của một ký tự trong chuỗi

Viết chương trình để đếm số lần xuất hiện của một ký tự cụ thể trong chuỗi.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class CountCharacterOccurrences {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String str = scanner.nextLine();
        System.out.print("Nhập ký tự cần đếm: ");
        char c = scanner.next().charAt(0);
        
        int count = 0;
        for (char ch : str.toCharArray()) {
            if (ch == c) {
                count++;
            }
        }
        
        System.out.println("Số lần xuất hiện ký tự '" + c + "' trong chuỗi: " + count);
    }
}

6. Tìm chuỗi con trong chuỗi

Viết chương trình để kiểm tra xem một chuỗi con có xuất hiện trong chuỗi chính hay không.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class SubstringCheck {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập chuỗi chính: ");
        String mainStr = scanner.nextLine();
        System.out.print("Nhập chuỗi con: ");
        String subStr = scanner.nextLine();
        
        if (mainStr.contains(subStr)) {
            System.out.println("Chuỗi con có xuất hiện trong chuỗi chính.");
        } else {
            System.out.println("Chuỗi con không có xuất hiện trong chuỗi chính.");
        }
    }
}

7. Tìm từ dài nhất trong chuỗi

Viết chương trình tìm từ dài nhất trong chuỗi và in ra từ đó.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class LongestWord {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập chuỗi: ");
        String str = scanner.nextLine();
        
        String[] words = str.split("\\s+");
        String longestWord = "";
        
        for (String word : words) {
            if (word.length() > longestWord.length()) {
                longestWord = word;
            }
        }
        
        System.out.println("Từ dài nhất trong chuỗi là: " + longestWord);
    }
}

8. Xử lý chuỗi đảo ngược từng từ trong câu

Viết chương trình để đảo ngược các từ trong câu nhưng giữ nguyên thứ tự của các từ.

Yêu cầu:

Mã nguồn:

import java.util.Scanner;

public class ReverseWords {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Nhập câu: ");
        String str = scanner.nextLine();
        
        String[] words = str.split("\\s+");
        StringBuilder result = new StringBuilder();
        
        for (String word : words) {
            String reversedWord = new StringBuilder(word).reverse().toString();
            result.append(reversedWord).append(" ");
        }
        
        System.out.println("Câu sau khi đảo ngược từng từ: " + result.toString().trim());
    }
}

9: Chuẩn hóa chuỗi sử dụng split() để tách chuỗi

import java.util.Scanner;

public class ChuanHoaChuoi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.print("Nhập chuỗi: ");
		String str = sc.nextLine();
		
		// chuyển chuỗi thành chữ thường, VD nGUyen vAN nAM -> nguyen van nam
		String strLower = str.toLowerCase(); 
		
		// Tác chuỗi thành mảng các từ, VD nguyen van nam -> {"nguyen", "van", "nam"}
		String[] words = strLower.split(" ");
		String chuanhoa = "";
		for (String string : words) {
			// thay thế từ đầu tiên của mỗi từ thành ký tự in hoa, VD nguyen -> Nguyen
			char fisrtLetter = string.charAt(0);
			char fisrtLetterUp = Character.toUpperCase(fisrtLetter);
			String capital = fisrtLetterUp + string.substring(1) + " ";
			chuanhoa += capital;
		}
		
		System.out.println("Chuỗi chuẩn hóa: " + chuanhoa.trim());
	
	}
}

10: Chuẩn hóa chuỗi sử dụng StringTokenizer

import java.util.Scanner;
import java.util.StringTokenizer;

public class DemoStrignTokensizeChuanHoaChuoi {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.print("Nhập chuỗi: ");
		String str = sc.nextLine();

		// chuyển chuỗi thành chữ thường, VD nGUyen vAN nAM -> nguyen van nam
		String strLower = str.toLowerCase();

		// Tác chuỗi thành mảng các từ, VD nguyen van nam -> {"nguyen", "van", "nam"}
		StringTokenizer stk = new StringTokenizer(strLower);
		String chuanhoa = "";
		while (stk.hasMoreElements()) {
			String string = (String) stk.nextElement();

			// thay thế từ đầu tiên của mỗi từ thành ký tự in hoa, VD nguyen -> Nguyen
			char fisrtLetter = string.charAt(0);
			char fisrtLetterUp = Character.toUpperCase(fisrtLetter);
			String capital = fisrtLetterUp + string.substring(1) + " ";
			chuanhoa += capital;
		}

		System.out.println("Chuỗi chuẩn hóa: " + chuanhoa.trim());
	}

}