/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Tự Học Java] MOB1014-Java 1 - Bài 6 - String/Chuỗi & Regular Expression

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ác ký tự đặc biệt
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!

No comments:

Post a Comment

/*header slide*/