NỘI DUNG:1. Chuỗi
- Chuỗi là gì
- Các phương thức trong String
- Các ký hiệu đặc biệt
2. Regular Expression/Biểu thức chính quy
-
Regular Expression là gì
- Các ví dụ
THỰC HIỆN:
1. Chuỗi là gì
Chuỗi là tập hợp các ký tự sử dụng để lưu trữ văn bản, trong Java khi biểu
diễn chúng được bao bọc bỡi cặp dấu nháy kép "",
(ký tự/char thì được bao bởi cặp dấu nháy đơn, ví dụ: 'C').
Ví dụ:
String str = "Hello"; // khởi tạo biến str có kiểu dữ liệu là
string và gán giá trị là chuỗi Hello
- Các phương thức trong String:
Phương Thức |
Giải Thích |
length() |
Tính độ dài của chuỗi |
toUpperCase() |
Chuyển chuỗi về kiễu chữ IN HOA |
toLowerCase() |
Chuyển chuỗi về kiễu chữ thường |
trim() |
Cắt bỏ các khoảng trắng đầu và cuối của chuỗi |
substring(beginIndex, endIndex) |
Lấy ra một chuỗi con trong chuỗi khác, từ vị trí beginIndex đến vị trí
thứ endIdex trừ 1.
|
charAt (index) |
Lấy ký tại vị trí thứ |
replaceAll(find, replace) |
Tìm kiếm và thay thế tất cả |
split(separator) |
Tách chuỗi ban đầu thành mãng chuỗi |
equals() |
So sánh bằng có phân biệt hoa/thường |
equalsIgnoreCase() |
So sánh bằng không phân biệt hoa/thường |
contains() |
Kiểm tra có chứa hay không |
startsWith() |
Kiểm tra có bắt đầu bởi hay không |
endsWith () |
Kiểm tra có kết thúc bởi hay không |
matches () |
So khớp với hay không |
indexOf() |
Tìm vị trí xuất hiện đầu tiên của chuỗi con |
lastIndexOf() |
Tìm vị trí xuất hiện cuối cùng của chuỗi con |
concat() |
Nối chuỗi |
Ví dụ:
public class Vidu_6_1_String {
public static void main(String[] args) {
String chuoiBanDau = " TOI TEN LA, VAN cOnG Khanh ";
String chuThuong = chuoiBanDau.toLowerCase(); // chuyển chữ thường
String boKhoangTrangDauCuoi = chuThuong.trim(); // bỏ khoảng trắng 2 đầu
String thayDauHaiCham = boKhoangTrangDauCuoi.replace(",", ":"); // thay thế dấu phẩy thành dấu 2 chấm
String thayKyTuDauTien = thayDauHaiCham.replaceFirst("t", "T"); // thay ký tự t đầu tiên thành chữ T
String[] tachChuoiThanhNhieuCum = thayKyTuDauTien.split(":"); // tách chuỗi ban đầu thành mãng, căn cứ vào dấu hai chấm
int chieuDaiCuaMang = tachChuoiThanhNhieuCum.length; // tính chiều dài của chuỗi
String hoVaTen = tachChuoiThanhNhieuCum[chieuDaiCuaMang-1]; // truy xuất vào cụm cuối cùng của mãng
String tenInHoa = hoVaTen.toUpperCase(); // ghi IN HOA toàn chuỗi
String noiChuoi = tachChuoiThanhNhieuCum[0].concat(": ") + tenInHoa; // nối chuỗi dùng cách cộng chuỗi thông thường và dùng hàm concat
System.out.println(noiChuoi);
}
}
Có một số trường hợp chúng ta muốn xuất ra chuỗi có dấu nháy đơn/kép hay các
dấu xẹt. Java sẽ hiểu sai. Hướng giải quyết là chúng ta THÊM dấu xẹt ngược
(xẹt dấu huyền) trước ký tự cần xuất ra thì một ký tự sau dấu xẹt đó Java
hiểu đó là một ký tự bình thường.
Các ký tự phổ biến thường dùng
Ký tự |
Giải Thích |
Kết Quả |
\' |
Dấu nháy đơn |
' |
\" |
Dấu nháy kép |
" |
\\ |
Dấu xẹt ngược (xẹt dấu huyền) |
\ |
\t |
Ký tự Tab |
Tab |
\r |
Về đầu dòng/chuyển con trỏ chuột về đầu dòng |
|
\n |
Xuống dòng/Dòng mới |
|
\b |
Xóa 1 ký tự trước dấu xẹt ngược (tương đương phím Backspace) |
Backspace |
2. Regular Expression/Biểu thức chính quy
Regular Expression hay regex còn gọi là biểu thức chính quy được dùng để tìm
kiếm xử lý chuỗi nâng cao thông qua biểu thức được xây dựng theo những
nguyên tắc riêng của nó mà bắc buộc chúng ta phải tuân theo. Khi gặp các yêu
cầu kiểm tra tính hợp lệ của email, số điện thoại, địa chỉ IP thì điều bạn
nghĩ tới đầu tiên chính là regex.
Sử dụng string.matches() để kiểm tra.
chuoi.matches(dinh_dang_muon_kiem_tra)
Ví dụ 2.1:
Viết chương trình yêu cầu nhập vào số điện thoại di động (di động của Việt
Nam là dãy số co1 10 chữ số, số đầu tiền là số 0, và 9 số còn lại là số bất kỳ) nếu không đúng định dạng yêu cầu nhập lại, nếu đúng in ra số vừa nhập
Code:
import java.util.Scanner;
public class regSoDiDong {
public static void main(String[] args) {
String chuoi;
String dinhDangSoDiDong = "[0][0-9]{9}";// định dạng của số di động Việt nam
Scanner duLieuNhap = new Scanner(System.in);
do {
System.out.print("Nhap vao so Di Dong: ");
chuoi = duLieuNhap.nextLine();
} while (!chuoi.matches(dinhDangSoDiDong)) ;
System.out.println(chuoi);
}
}
Ví dụ 2.2:
Viết chương trình nhập và mã số sinh viên, nếu không đúng ghi ra thông báo
gợi ý định dạng của mã số sinh viên và yêu cầu nhập lại, đếu đúng chuyển
thành chữ IN HOA (các ký tự không phải là số) in ra mà hình.
Code:
import java.util.Scanner;
public class regMaSoSinhVien {
public static void main(String[] args) {
String chuoi;
// String dinhDangMSSV = "[\\w]{2}[0-9]{5}"; // ví dụ MSSV 2 ký tự đầu là chữ cái, 5 ký tự tiếp theo là số
String dinhDangMSSV = "[\\w]{2}[\\d]{5}";
Scanner duLieuNhap = new Scanner(System.in);
while (true){
System.out.print("Nhap vao ma so SV: ");
chuoi = duLieuNhap.nextLine();
if (chuoi.matches(dinhDangMSSV)){
break;
} else {
System.out.println("Ma so SV co dang 'PS12345' !");
}
}
System.out.println(chuoi.toUpperCase());
}
}
Ví dụ 2.3:
Viết chương trình nhập số CCCD (căn cước công dân) nếu không đúng yêu cầu
nhập lại, và in ra giới tính và năm sinh của công dân có số CCCD vừa
nhập.
Ý nghĩa 12 số trong CCCD:
- 03 chữ số đầu tiên là mã tỉnh, thành phố trực thuộc trung ương hoặc mã quốc
gia nơi công dân đăng ký khai sinh,
- 01 chữ số tiếp theo là mã giới tính
của công dân
- 02 chữ số tiếp theo là mã năm sinh của công dân;
- 06
chữ số cuối là khoảng số ngẫu nhiên.
- Mã thế kỷ và mã giới tính được quy ước như sau:
+ Thế kỷ 20 (từ năm 1900 đến hết năm 1999): Nam 0, nữ 1;
+ Thế kỷ 21 (từ
năm 2000 đến hết năm 2099): Nam 2, nữ 3;
+ Thế kỷ 22 (từ năm 2100 đến hết
năm 2199): Nam 4, nữ 5;
+ Thế kỷ 23 (từ năm 2200 đến hết năm 2299): Nam
6, nữ 7;
+ Thế kỷ 24 (từ năm 2300 đến hết năm 2399): Nam 8, nữ 9.
-
Mã năm sinh: Thể hiện hai số cuối năm sinh của công dân
...
Code:
import java.util.Scanner;
public class regMaSoSinhVien {
public static void main(String[] args) {
String chuoi;
String dinhDangCCCD = "\\d{12}";
char gioiTinh_4; // dùng để chứa ký thứ 4 trong chuỗi
String namSinh_56; // lấy vị trí thứ 5 và 6
String gioiTinh;
int namSinh_2SoDau;
Scanner duLieuNhap = new Scanner(System.in);
while (true){
System.out.print("Nhap vao so CCCD: ");
chuoi = duLieuNhap.nextLine();
if (chuoi.matches(dinhDangCCCD)){
break;
} else {
System.out.println("Can cuoc cong dan co 12 chu so!");
}
}
gioiTinh_4 = chuoi.charAt(3);
switch (gioiTinh_4){
case '0':
gioiTinh = "Nam";
namSinh_2SoDau = 19;
break;
case '2':
gioiTinh = "Nam";
namSinh_2SoDau = 20;
break;
case '4':
gioiTinh = "Nam";
namSinh_2SoDau = 21;
break;
case '6':
gioiTinh = "Nam";
namSinh_2SoDau = 22;
break;
case '8':
gioiTinh = "Nam";
namSinh_2SoDau = 23;
break;
case '1':
gioiTinh = "Nu";
namSinh_2SoDau = 19;
case '3':
gioiTinh = "Nu";
namSinh_2SoDau = 20;
case '5':
gioiTinh = "Nu";
namSinh_2SoDau = 21;
case '7':
gioiTinh = "Nu";
namSinh_2SoDau = 22;
case '9':
gioiTinh = "Nu";
namSinh_2SoDau = 23;
break;
default:
gioiTinh = "CHUA XAC DINH!";
namSinh_2SoDau = 99;
}
namSinh_56 = chuoi.substring(4, 6);
System.out.printf("Ban la %s, sinh nam %d%s%n", gioiTinh, namSinh_2SoDau, namSinh_56);
}
}
P/s: Các bạn có thể viết cách khác code gọn hơn nhiều
Tham khảo các quy tắc viết Regular Expression
tại đây
Xong!