Đếm số từ trong chuỗi bằng cách đếm các ký tự phân cách: khoảng trắng (' '), tab ('\t'), xuống dòng ('\n'). Số từ = số phân cách + 1.
Mã nguồn
using System;
public class Demo {
public static void Main() {
string str = "Hello World!";
int wordCount = 1; // Ít nhất 1 từ nếu chuỗi không rỗng
for (int i = 0; i < str.Length; i++) {
char c = str[i];
if (c == ' ' || c == '\n' || c == '\t') {
wordCount++;
}
}
Console.WriteLine("Số từ trong chuỗi = {0}", wordCount);
}
}
Kết quả
Số từ trong chuỗi = 2
Vấn đề của cách trên
- Sai khi chuỗi có nhiều khoảng trắng liên tiếp:
"Hello World"→ đếm 4 từ (sai). - Sai khi chuỗi bắt đầu/kết thúc bằng khoảng trắng.
- Không xử lý các ký tự whitespace khác (
\r,\v, non-breaking space...).
Cách chuẩn: String.Split + RemoveEmptyEntries
string str = "Hello World! This is a test.";
string[] words = str.Split(new[] { ' ', '\t', '\n', '\r' },
StringSplitOptions.RemoveEmptyEntries);
int count = words.Length; // 6
Cách Regex (mạnh nhất)
using System.Text.RegularExpressions;
int count = Regex.Matches(str, @"\S+").Count;
// \S+ = một hoặc nhiều ký tự KHÔNG phải whitespace
So sánh
| Phương pháp | Xử lý multi-space | Unicode whitespace | Hiệu năng |
|---|---|---|---|
| Đếm char split | Không | Không | Nhanh |
| Split + RemoveEmptyEntries | Có | Chỉ char chỉ định | Trung bình |
Regex \S+ | Có | Có (tất cả Unicode whitespace) | Chậm hơn |
Lưu ý
- Chuỗi rỗng hoặc chỉ whitespace → 0 từ.
- Dấu chấm, phẩy, ngoặc... được coi là một phần của từ (ví dụ:
"Hello,"là 1 từ). - Tiếng Việt: từ có thể không tách bằng space — cần tokenizer chuyên dụng (VnCoreNLP, Underthesea...).