Skip to content

🧵 13.1 String methods cơ bản

📖 Giới thiệu

String methods là các hàm có sẵn để xử lý chuỗi trong Python. Chúng giúp thay đổi định dạng, tìm kiếm, thay thế và xử lý văn bản một cách dễ dàng mà không cần viết code phức tạp.

Mục tiêu bài học:

  • Sử dụng thành thạo các string methods cơ bản
  • Xử lý văn bản hiệu quả
  • Ứng dụng trong bài toán thực tế

🔧 Cú pháp

Thay đổi định dạng:

python
text = "Hello World"

print(text.upper())      # HELLO WORLD
print(text.lower())      # hello world
print(text.title())      # Hello World
print(text.capitalize()) # Hello world

Tìm kiếm:

python
text = "Python programming"

print(text.find("Pro"))        # 7
print(text.count("o"))          # 2
print(text.startswith("Py"))    # True
print(text.endswith("ing"))     # True

Cắt ghép:

python
text = "apple,banana,orange"
fruits = text.split(",")        # ['apple', 'banana', 'orange']
joined = " - ".join(fruits)     # "apple - banana - orange"

🔬 Phân tích & Giải thích chi tiết

1. 🔤 Thay đổi định dạng chữ

python
ten = "nguyễn văn an"

# Các cách format
print(f"Gốc: {ten}")
print(f"IN HOA: {ten.upper()}")
print(f"in thường: {ten.lower()}")
print(f"Chữ Đầu Hoa: {ten.title()}")
print(f"Chỉ đầu hoa: {ten.capitalize()}")

# Kiểm tra định dạng
print(f"Có in hoa? {ten.isupper()}")
print(f"Có in thường? {ten.islower()}")
print(f"Có chữ đầu hoa? {ten.istitle()}")

2. 🔍 Tìm kiếm trong chuỗi

python
cau = "Tôi học Python tại trường"

# Tìm vị trí
vi_tri = cau.find("Python")
print(f"'Python' ở vị trí: {vi_tri}")

# Đếm số lần xuất hiện
so_lan = cau.count("ô")
print(f"Chữ 'ô' xuất hiện: {so_lan} lần")

# Kiểm tra bắt đầu/kết thúc
print(f"Bắt đầu bằng 'Tôi': {cau.startswith('Tôi')}")
print(f"Kết thúc bằng 'trường': {cau.endswith('trường')}")

3. ✂️ Cắt và ghép chuỗi

python
# Tách chuỗi
mon_hoc = "Toán,Văn,Anh,Lý"
ds_mon = mon_hoc.split(",")
print(f"Danh sách: {ds_mon}")

# Ghép chuỗi
ket_qua = " - ".join(ds_mon)
print(f"Đã ghép: {ket_qua}")

# Loại bỏ khoảng trắng
text_co_space = "  Hello World  "
print(f"Gốc: '{text_co_space}'")
print(f"Đã strip: '{text_co_space.strip()}'")

💻 Ví dụ minh họa

Ví dụ 1: Xử lý tên học sinh

python
# Danh sách tên chưa chuẩn
ten_hoc_sinh = [
    "  nguyễn văn an  ",
    "TRẦN THỊ bình",
    "lê VĂN chi  ",
    "  PHẠM thị dung"
]

print("📝 XỬ LÝ TÊN HỌC SINH")
print("=" * 30)

print("Tên gốc:")
for ten in ten_hoc_sinh:
    print(f"'{ten}'")

print("\nTên đã chuẩn hóa:")
ten_chuan = []
for ten in ten_hoc_sinh:
    # Loại bỏ space + chữ đầu hoa
    ten_sach = ten.strip().title()
    ten_chuan.append(ten_sach)
    print(f"'{ten_sach}'")

print(f"\nĐã xử lý {len(ten_chuan)} tên")

# Kiểm tra tên nào có chữ "Thị"
print("\nTên có 'Thị':")
for ten in ten_chuan:
    if "Thị" in ten:
        print(f"- {ten}")

Ví dụ 2: Phân tích email

python
# Danh sách email
emails = [
    "an@gmail.com",
    "binh@yahoo.com", 
    "chi@gmail.com",
    "dung@outlook.com",
    "em@gmail.com"
]

print("📧 PHÂN TÍCH EMAIL")
print("=" * 25)

gmail_count = 0
yahoo_count = 0
outlook_count = 0

print("Chi tiết email:")
for email in emails:
    # Tách tên và domain
    parts = email.split("@")
    ten_user = parts[0]
    domain = parts[1]
    
    print(f"User: {ten_user.ljust(8)} | Domain: {domain}")
    
    # Đếm theo nhà cung cấp
    if email.endswith("@gmail.com"):
        gmail_count += 1
    elif email.endswith("@yahoo.com"):
        yahoo_count += 1
    elif email.endswith("@outlook.com"):
        outlook_count += 1

print("-" * 25)
print("Thống kê nhà cung cấp:")
print(f"Gmail: {gmail_count}")
print(f"Yahoo: {yahoo_count}")
print(f"Outlook: {outlook_count}")

# Tìm domain phổ biến nhất
if gmail_count >= yahoo_count and gmail_count >= outlook_count:
    pho_bien = "Gmail"
elif yahoo_count >= outlook_count:
    pho_bien = "Yahoo"
else:
    pho_bien = "Outlook"

print(f"Phổ biến nhất: {pho_bien}")

Ví dụ 3: Làm sạch văn bản

python
# Văn bản cần làm sạch
van_ban = """
    Python là ngôn ngữ lập trình.
    PYTHON rất dễ học!!!
    python được dùng nhiều???
"""

print("🧹 LÀM SẠCH VĂN BẢN")
print("=" * 25)

print("Văn bản gốc:")
print(repr(van_ban))

# Làm sạch từng bước
# 1. Loại bỏ khoảng trắng đầu cuối
sach_1 = van_ban.strip()

# 2. Thay thế ký tự đặc biệt
sach_2 = sach_1.replace("!!!", ".")
sach_3 = sach_2.replace("???", ".")

# 3. Thay thế nhiều dấu cách thành 1
while "  " in sach_3:
    sach_3 = sach_3.replace("  ", " ")

# 4. Chuẩn hóa "python" thành "Python"
sach_4 = sach_3.replace("python", "Python")
sach_5 = sach_4.replace("PYTHON", "Python")

print("\nVăn bản đã sạch:")
print(repr(sach_5))

print("\nHiển thị đẹp:")
for dong in sach_5.split("\n"):
    dong_sach = dong.strip()
    if dong_sach:  # Bỏ dòng trống
        print(f"• {dong_sach}")

# Thống kê
so_tu = len(sach_5.split())
so_python = sach_5.count("Python")
print(f"\nThống kê:")
print(f"- Số từ: {so_tu}")
print(f"- Số lần nhắc 'Python': {so_python}")

🏋️ Thực hành

Bài tập 1: Chuyển đổi định dạng

python
# Chuyển tên thành chữ đầu hoa
ten = "nguyễn văn minh"
ten_chuan = ten.title()
print(f"Tên chuẩn: {ten_chuan}")

Bài tập 2: Tìm từ trong câu

python
# Tìm từ "Python" trong câu
cau = "Tôi đang học Python"
vi_tri = cau.find("Python")
print(f"'Python' ở vị trí: {vi_tri}")

Bài tập 3: Tách và ghép

python
# Tách địa chỉ email
email = "student@school.edu"
parts = email.split("@")
user = parts[0]
domain = parts[1]
print(f"User: {user}, Domain: {domain}")

📋 Tóm tắt

Nhóm methods theo chức năng:

NhómMethodsChức năng
Định dạngupper(), lower(), title(), capitalize()Thay đổi chữ hoa/thường
Tìm kiếmfind(), count(), startswith(), endswith()Tìm vị trí, đếm
Cắt ghépsplit(), join(), strip()Tách/ghép chuỗi
Thay thếreplace()Thay đổi nội dung

Methods thường dùng:

python
text = "  Hello World  "

# Làm sạch
text.strip()          # "Hello World"
text.replace("o", "0") # "  Hell0 W0rld  "

# Định dạng
text.upper()          # "  HELLO WORLD  "
text.title()          # "  Hello World  "

# Tách ghép
text.split()          # ["Hello", "World"]
"-".join(["a", "b"])  # "a-b"

Lưu ý quan trọng:

  1. String immutable: Methods tạo string mới, không thay đổi gốc
  2. Case sensitive: find() phân biệt hoa thường
  3. Return -1: find() trả về -1 nếu không tìm thấy
  4. Chain methods: Có thể nối methods: text.strip().upper()

Chuẩn bị cho bài tiếp theo:

Bài tiếp theo sẽ học về 🔍 Xử lý chuỗi nâng cao và regex!


💡 Mẹo: String methods không thay đổi chuỗi gốc, nhớ gán lại biến!

🧵 Thực hành: Thử làm sạch danh sách tên có nhiều lỗi định dạng!

🐍 Khóa học Python căn bản bằng tiếng Việt