# XÂU TRONG PYTHON
## 1. Giới thiệu
Trong Python, một xâu (string) là một chuỗi các ký tự. Xâu là một kiểu dữ liệu cơ bản và rất phổ biến trong việc xử lý văn bản và dữ liệu có liên quan đến văn bản.
* Để tạo một xâu trong Python, bạn có thể sử dụng cặp dấu nháy đơn ('') hoặc cặp dấu nháy kép ("") để bao quanh xâu. Dưới đây là một số ví dụ:
``` py
xau1 = 'Xin chào'
xau2 = "Hello, world!"
```
* Bạn cũng có thể sử dụng cặp dấu nháy ba (''' ''') hoặc dấu nháy ba kép (""" """) để tạo xâu nhiều dòng:
``` py
xau3 = '''Đây là một ví dụ về
xâu nhiều dòng trong Python.'''
xau4 = """This is an example of
a multiline string in Python."""
```
Trong Python, xâu là một kiểu dữ liệu không thay đổi (immutable), điều này có nghĩa là bạn không thể thay đổi các ký tự trong xâu sau khi nó được tạo. Tuy nhiên, bạn có thể thực hiện các phép toán và phương thức xâu để thực hiện các thao tác xâu khác nhau.
***Dưới đây là một số ví dụ về phép toán và phương thức phổ biến trên xâu trong Python:***
* Nối xâu: Sử dụng toán tử + để nối hai xâu lại với nhau.
``` py
xau5 = xau1 + ' ' + xau2 # Kết quả: 'Xin chào Hello, world!'
```
* Lấy độ dài xâu: Sử dụng phương thức `len()` để lấy độ dài của xâu.
``` py
do_dai = len(xau3) # Kết quả: 34
```
* Cắt xâu: Sử dụng cú pháp `xau[start:end]` để cắt một phần của xâu từ chỉ số start đến end-1.
``` py
xau_cat = xau3[5:9] # Kết quả: 'là một'
```
* Phương thức xâu: Python cung cấp một loạt các phương thức để thao tác với xâu, chẳng hạn như `upper()` (chuyển thành chữ hoa), `lower()` (chuyển thành chữ thường), `replace()` (thay thế ký tự hoặc xâu con), `split()` (tách xâu thành danh sách các từ) và nhiều hơn nữa.
``` py
xau_chu_hoa = xau1.upper() # Kết quả: 'XIN CHÀO'
xau_thay_the = xau2.replace('world', 'Python') # Kết quả: 'Hello, Python!'
danh_sach_tu = xau3.split() # Kết quả: ['Đây', 'là', 'một', 'ví', 'dụ', 'về', 'xâu', 'nhiều', 'dòng', 'trong', 'Python.']
```
## 2. Dưới đây là một số hàm và tác dụng của hàm.
Dưới đây là một số hàm thường được sử dụng để xử lý xâu trong Python, cùng với cách sử dụng và tác dụng của chúng:
* `len(xau)`: Hàm `len()` được sử dụng để trả về độ dài của xâu, tức là số lượng ký tự trong xâu.
``` py
xau = "Hello, world!"
do_dai = len(xau) # Kết quả: 13
```
* `xau.upper()` và `xau.lower()`: `Hàm upper()` được sử dụng để chuyển tất cả các ký tự trong xâu thành chữ hoa, trong khi lower() được sử dụng để chuyển tất cả các ký tự thành chữ thường.
``` py
xau = "Hello, world!"
xau_chu_hoa = xau.upper() # Kết quả: "HELLO, WORLD!"
xau_chu_thuong = xau.lower() # Kết quả: "hello, world!"
```
* `xau.replace(gia_tri_cu, gia_tri_moi)`: Hàm `replace()` được sử dụng để thay thế tất cả các lần xuất hiện của một giá trị trong xâu bằng một giá trị mới.
``` py
xau = "Hello, world!"
xau_moi = xau.replace("world", "Python") # Kết quả: "Hello, Python!"
```
* `xau.split(ky_tu_tach)`: Hàm `split()` được sử dụng để tách xâu thành một danh sách các phần tử, sử dụng một ký tự tách (mặc định là khoảng trắng) để phân chia các phần tử.
``` py
xau = "Hello, world!"
danh_sach_tu = xau.split() # Kết quả: ["Hello,", "world!"]
```
* `xau.strip()`, `xau.lstrip()`, và `xau.rstrip()`: Hàm `strip()` được sử dụng để loại bỏ các khoảng trắng không cần thiết ở đầu và cuối xâu. `lstrip()` và `rstrip()` tương tự nhưng chỉ loại bỏ khoảng trắng ở đầu hoặc cuối xâu.
``` py
xau = " Hello, world! "
xau_moi = xau.strip() # Kết quả: "Hello, world!"
```
* `xau.find(gia_tri)`: Hàm `find()` được sử dụng để tìm vị trí xuất hiện đầu tiên của một giá trị trong xâu. Nếu không tìm thấy, nó trả về -1.
``` py
xau = "Hello, world!"
vi_tri = xau.find("world") # Kết quả: 7
```
Đây chỉ là một số hàm cơ bản để thao tác với xâu trong Python. Có nhiều hàm khác có sẵn, và bạn cũng có thể tạo các hàm tùy chỉnh để xử lý xâu theo nhu cầu của mình.
## 3. Duyệt xâu
Để duyệt qua từng ký tự trong một xâu trong Python, bạn có thể sử dụng vòng lặp `for`. Dưới đây là một số cách để duyệt xâu:
### 3.1 Duyệt qua từng ký tự:
``` py
xau = "Hello, world!"
for ky_tu in xau:
print(ky_tu)
```
Kết quả:
```
H
e
l
l
o
,
w
o
r
l
d
!
```
### 3.2 Duyệt qua chỉ số của từng ký tự:
``` py
xau = "Hello, world!"
for i in range(len(xau)):
ky_tu = xau[i]
print(ky_tu)
```
*Kết quả tương tự như trên.*
### 3.3 Sử dụng hàm `enumerate()` để lấy cả chỉ số và giá trị của từng ký tự:
``` py
xau = "Hello, world!"
for i, ky_tu in enumerate(xau):
print(i, ky_tu)
```
Kết quả:
```
0 H
1 e
2 l
3 l
4 o
5 ,
6
7 w
8 o
9 r
10 l
11 d
12 !
```
_**Lưu ý rằng chỉ số trong Python bắt đầu từ 0.**_
_**Đó là cách bạn có thể duyệt qua từng ký tự trong xâu bằng cách sử dụng vòng lặp `for`. Bạn có thể thực hiện các thao tác xử lý hoặc truy cập vào từng ký tự trong quá trình duyệt để thực hiện các tác vụ khác nhau.**_
## 4. Cắt xâu
Phép cắt xâu (String Slicing) trong Python cho phép bạn trích xuất một phần của xâu bằng cách chỉ định vị trí bắt đầu và vị trí kết thúc của đoạn cần trích xuất. Phép cắt xâu sẽ trả về một xâu con mới chứa các ký tự trong phạm vi đã chỉ định.
Cú pháp của phép cắt xâu: `xau[start:end]`
``` py
arr[start:stop] # items start through stop-1
arr[start:] # items start through the rest of the array
arr[:stop] # items from the beginning through stop-1
arr[:] # a copy of the whole array
arr[start:stop:step] # start through not past stop, by step
```
Dưới đây là một số ví dụ về phép cắt xâu:
``` py
xau = "Xin chào, thế giới!"
xau1 = xau[4:10] # Cắt từ vị trí thứ 4 đến vị trí thứ 10 (không bao gồm)
print(xau1) # Kết quả: "chào, "
xau2 = xau[:7] # Cắt từ đầu xâu đến vị trí thứ 7 (không bao gồm)
print(xau2) # Kết quả: "Xin chà"
xau3 = xau[12:] # Cắt từ vị trí thứ 12 đến hết xâu
print(xau3) # Kết quả: "thế giới!"
xau4 = xau[-6:-1] # Cắt từ vị trí thứ 6 từ cuối đến vị trí thứ 1 từ cuối (không bao gồm)
print(xau4) # Kết quả: "giới"
```
_**Lưu ý rằng trong phép cắt xâu, vị trí `start` là bắt buộc cần có, còn vị trí `end` có thể được bỏ qua. Nếu `start` không được chỉ định, nó sẽ mặc định là 0 (đầu xâu). Nếu `end` không được chỉ định, nó sẽ mặc định là độ dài của xâu (cuối xâu).**_
_Phép cắt xâu trong Python là một cách mạnh mẽ để thao tác và trích xuất thông tin từ xâu dễ dàng và linh hoạt._
Link tham khảo : [Slicing in Python](https://www.geeksforgeeks.org/string-slicing-in-python/)