You are on page 1of 14

Bai 08: STRING

I. Các khái niệm


1. String là gì?
- Là một đối tượng được Java định nghĩa để xử lý các bài toán với chuỗi văn bản như: biểu diễn,
tìm kiếm, xóa, cắt, duyệt các ký tự, chuỗi con
- Là kiểu dữ liệu có cấu trúc
- Là kiểu đối tượng immutable. Có nghĩa là: Giá trị của đối tượng String, sau khi được khởi tạo
sẽ không bị thay đổi khi thực hiện các hành vi của chính nó
I. Các khái niệm
2. Cách khởi tạo đối tượng String
2.1 Cách 1: Khởi tạo đối tượng String tại vùng nhớ StringPool
- Cú pháp: String ten_thuoc_tinh = “chuoi_van_ban”
VD: String ten = “Nam”
- Ý nghĩa:
◦ Đây là cách khởi tạo phổ biến và luôn được ưu tiên sử dụng
◦ Cách khởi tạo trên, đối tượng String sẽ được lưu trữ tại vùng nhớ StringPool. Đây là một vùng nhớ nằm
trong vùng nhớ heap, dùng để lưu trữ các giá trị chuỗi hằng, giúp tiết kiệm tài nguyên
I. Các khái niệm
2. Cách khởi tạo đối tượng String
Giải thích:
- Nếu chuỗi “Nam” chưa tồn tại trong StringPool thì nó sẽ tạo ra 1 ô nhớ có giá trị “Nam” để
thuộc tính ten trỏ vào
- Nếu chuỗi “Nam” đã tồn tại trong vùng nhớ, nó sẽ không tạo ra 1 ô nhớ mới để lưu trữ cho
thuộc tính ten mà trỏ đến ô nhớ đã có sẵn chứa giá trị “Nam” trước đó => Điều này giúp cho
việc xử lý nhanh hơn và tiết kiệm được tài nguyên sử dụng
Mô hình:
Nam
String ten1 = “Nam”; Java Heap
Lan
String ten2 = “Nam”;
String Pool
String ten3 = “Lan”;
I. Các khái niệm
2.2 Cách 2: Khởi tạo mới đối tượng String tại vùng nhớ Heap
- Cú pháp: String ten_thuoc_tinh = new String(“chuoi_van_ban”);
- VD: String ten = new String(“Nam”);
- Ý nghĩa:
◦ Đây là cách khởi tạo dùng trong một số trường hợp bắt buộc như chuyển đổi một dãy ký tự sang String
hoặc 1 dãy số byte sang String …..
◦ Cách khởi tạo trên, đối tượng String sẽ được khởi tạo mới và được lưu trữ lại vùng nhớ Heap

Giải thích:
- Nó sẽ tạo ra 1 ô nhớ mởi để lưu trữ cho thuộc tính ten mà không quan tâm đến việc có tồn tại
một ô nhớ khác có giá trị tương đương hay không. Điều này giúp cho việc tạo ra sự khác biệt
cho từng đối tượng
I. Các khái niệm
2.2 Cách 2: Khởi tạo mới đối tượng String tại vùng nhớ Heap (tt)
Mô hình:
String ten1 = new String(“Nam”); Nam Nam
String ten2 = new String(“Nam”); Lan

String Pool Nam


Java Heap
I. Các khái niệm
3. So sánh 2 đối tượng String
Kiểu đối tượng Toán tử/Phương Ví dụ
thức sử dụng
String pool – String Pool ==, equals String ten1 = “Nam”;
String ten2 = “Nam”;
Boolean kt = ten1 == ten2; => kt = true;
Boolean kt = ten1.equals(ten2); => kt = true;
Heap – Heap equals String ten1 = “Nam”;
String ten2 = new String(“Nam”);
Boolean kt = ten1.equals(ten2); => kt = true;
Tên phương thức Ý nghĩa VD phân tích
String text = “Hello Android”
length() - int – Trả về số lượng ký tự của chuỗi int length = text.length();
=> length = 13;
charAt(int i) - char – Trả về ký tự thứ i trong chuỗi char kyTu = text.charAt(0);
=> kyTu = “H”;
equals(String srt); - boolean – Trả về kết quả khi so boolean kt = text.equals("Nam");
sánh 2 chuỗi. => kt = false; //Vì 2 chuỗi là khác nhau
- true: Nếu 2 chuỗi giống hệt nhau
- false: Nếu 2 chuỗi khác nhau
equalsIgnoreCase - boolean – Trả về kết quả so sánh 2 boolean kt = text.equalsIgnoreCase("hello android");
(String srt) chuỗi (Bỏ qua phân biệt viết hoa, => Kt = true;
viết thường)
- true: Nếu 2 chuỗi giống nhau
- false: Nếu 2 chuỗi khác nhau
…. - ….. …..
Tên phương thức Ý nghĩa VD phân tích
String text = “Hello Android”
compareTo(String - int – So sánh từng ký tự của 2 chuỗi int kt = text.compareTo("Gello");
srt) bằng mã ASCII Þ kt = 1; // H – G = 1;
- Trả về 0 nếu 2 chuỗi giống hệt nhau int kt = text.compareTo("lello");
- Trả về giá trị < 0 nếu chuỗi 1 < chuỗi => kt = -1 ; //
2
- Trả về giá trị > 0 nếu chuỗi 1 > chuỗi
2
indexOf(String - int – Tìm kiếm từ vị trí 0, trả về vị trí int pos = text.indexOf("And");
srt) xuất hiện đầu tiên của chuỗi srt trong Þ pos = 6; //6 là vị trí chuỗi And;
chuỗi text. Nếu không tìm thấy sẽ trả về int pos = text.indexOf("Ane");
giá trị -1 => pos = -1; //Không có chuỗi “Ane”
indexOf(String - int – Tìm kiếm từ vị trí start, trả về vị int pos = text.indexOf("And", 7);
srt, int start) trí xuất hiện đầu tiên của chuỗi srt Þ pos = -1;
trong chuỗi text. Nếu không tìm thấy int pos = text.indexOf("And", 5);
thì sẽ trả về giá trị -1 => pos = 6;

… - … …
Tên phương thức Ý nghĩa VD phân tích
String text = “Hello Android”
lastIndexOf(String - int – Tìm kiếm và trả về vị trí xuất int pos = text.lastIndexOf("o");
srt); cuối cùng của chuỗi srt trong chuỗi Þ pos = 10;
text. Nếu không tìm thấy thì trả về int pos = text.lastIndexOf(“g");
giá trị -1 pos = -1;
lastIndexOf(String - int - Tìm kiếm từ vị trí start trở về
srt, int start) đầu chuỗi, trả về vị trí xuất hiện cuối
cùng của chuỗi srt trong chuỗi text. Nếu
không tìm thấy thì trả về giá trị -1
startsWith(String - Boolean – Trả về true nếu chuỗi text boolean kt = text.startsWith(“Hello”)’
str) bắt đầu với chuỗi str, false nếu sai => Kt = true;
… - … …
Các khái niệm
5. Các ví dụ thực hành
VD1: Viết chương trình nhập vào 1 chuỗi text và in ra:
- Các ký tự viết hoa có trong chuỗi
- Tính tổng các ký tự là số có trong chuỗi
Lời giải:
public void inKyTuVietHoa() {
char kyTuHoa;
chuoiChiGomKyTuHoa = "";
for (int i = 0; i < chuoiNhapVao.length(); i++) {
kyTuHoa = chuoiNhapVao.charAt(i);
if (kyTuHoa >= 'A' && kyTuHoa <= 'Z') {
chuoiChiGomKyTuHoa += kyTuHoa;
}
}

public void tinhTongChuSo() {


char kyTuSo;
//Công việc cần thực hiện
for (int i =0; i < chuoiNhapVao.length(); i++) {
kyTuSo = chuoiNhapVao.charAt(i);
if (kyTuSo >= '0' && kyTuSo <= '9') {
int so = Integer.parseInt(kyTuSo +"");
tong += so;
}
}
}
Bài tập vận dụng
Bài 1 (120 phút): Xây dựng chương trình với đối tượng Text có thuộc tính chuỗi text và có các
hành vi sau đây:
- Phương thức khởi tạo gồm 1 tham số truyền vào để nhập dữ liệu cho thuộc tính text
- Tính tổng các số có trong chuỗi:
VD: abc123kji4hh56 => Tổng = 123 + 4 + 56
- Tìm và in ra chữ cái có mã ASCII nhỏ nhất
- Tìm và in ra các ký tự in hoa có trong chuỗi
- Viết hoa các chữ cái đầu của từng từ trong chuỗi
- In ra chuỗi bị đảo ngược

You might also like