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.
java.lang.String là nó immutable (bất biến), tức là khi một chuỗi được tạo ra, bạn không thể thay đổi nó nữa. Mọi thao tác thay đổi chuỗi sẽ tạo ra một đối tượng chuỗi mới.Các phương thức phổ biến của lớp String trong Java bao gồm:
length(): Trả về độ dài của chuỗi.
String str = "Hello";
int length = str.length(); // trả về 5
charAt(int index): Trả về ký tự tại vị trí index trong chuỗi.
char c = str.charAt(1); // trả về 'e'
substring(int start, int end): Trả về một chuỗi con từ vị trí start đến end - 1.
String sub = str.substring(1, 4); // trả về "ell"
toLowerCase() và toUpperCase(): Chuyển đổi chuỗi thành chữ hoa hoặc chữ thường.
String lower = str.toLowerCase(); // "hello"
String upper = str.toUpperCase(); // "HELLO"
replace(CharSequence target, CharSequence replacement): Thay thế các ký tự con trong chuỗi.
String replaced = str.replace("e", "a"); // "Hallo"
trim(): Loại bỏ khoảng trắng ở đầu và cuối chuỗi.
String str = " Hello ";
String trimmed = str.trim(); // "Hello"
split(String regex): Tách chuỗi thành mảng các chuỗi con theo biểu thức chính quy.
String str = "Java is fun";
String[] words = str.split(" "); // ["Java", "is", "fun"]
contains(CharSequence sequence): Kiểm tra chuỗi có chứa một chuỗi con hay không.
boolean contains = str.contains("Java"); // true
StringBuilder và StringBufferStringBuilderString khi thao tác với chuỗi trong vòng lặp.StringBuilder không hỗ trợ đồng bộ hóa, vì vậy nó không an toàn khi sử dụng trong môi trường đa luồng.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"
StringBufferStringBuilder, nhưng nó có thêm tính năng đồng bộ hóa (synchronization), giúp đảm bảo rằng các thao tác với chuỗi trong môi trường đa luồng là an toàn.StringBuffer thường có hiệu suất thấp hơn StringBuilder khi không cần phải sử dụng trong môi trường đa luồng.Ví dụ sử dụng StringBuffer:
StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World");
System.out.println(sbf.toString()); // "Hello World"
StringBuilder và StringBuffer:StringBuilder nhanh hơn vì không đồng bộ hóa, trong khi StringBuffer chậm hơn một chút do có tính năng đồng bộ hóa.StringBuffer là thread-safe, còn StringBuilder thì không.Khi nào sử dụng:
StringBuffer.StringBuilder để có hiệu suất tốt hơn.StringTokenizerStringTokenizer 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.
StringTokenizer có thể tách chuỗi bằng các ký tự phân cách như dấu cách, dấu phẩy, hoặc bất kỳ ký tự nào mà bạn chỉ định.StringTokenizer:Constructor:
StringTokenizer(String str)
StringTokenizer(String str, String delimiters)
StringTokenizer(String str, String delimiters, boolean returnDelims)
str: Chuỗi cần phân tách.delimiters: Các ký tự phân tách.returnDelims: Nếu true, các ký tự phân tách sẽ được trả về như là token riêng biệt.StringTokenizer:hasMoreTokens(): Kiểm tra xem còn token nào không.nextToken(): Lấy token tiếp theo.countTokens(): Trả về số lượng token còn lại.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
StringTokenizer đã bị đánh giá là cũ và không còn được khuyến khích trong các phiên bản mới của Java (sau Java 1.4). Thay vào đó, bạn nên sử dụng split() từ lớp String hoặc Scanner để phân tích chuỗi.
Ví dụ sử dụng split() thay vì StringTokenizer:
String str = "Java,Python,C++,JavaScript";
String[] tokens = str.split(",");
for (String token : tokens) {
System.out.println(token);
}
String: Là kiểu dữ liệu chuỗi trong Java, nhưng bất biến.StringBuilder và StringBuffer: Là các lớp thay thế cho String khi cần thay đổi chuỗi nhiều lần, StringBuilder nhanh hơn trong môi trường đơn luồng, còn StringBuffer an toàn trong môi trường đa luồng.StringTokenizer: Dùng để phân tích chuỗi thành các token, nhưng đã bị thay thế bởi các phương thức hiện đại hơn như split().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());
}
}
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.");
}
}
}
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());
}
}
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);
}
}
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);
}
}
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.");
}
}
}
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);
}
}
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());
}
}
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());
}
}
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());
}
}