Giới thiệu lớp String Namespace: System Dùng để thể hiện dạng chuỗi trong .NET Bất cứ thao tác nào liên quan đến chuỗi ta sẽ dùng lớp string để lưu trữ và xử lý... Giới thiệu lớp St
Trang 1GIỚI THIỆU C# (tt)
GV: Phạm Anh PhươngEmail:
paphuong@fit.hcmuns.edu.vn
Trang 2Chủ đề
Value Type & Reference Type
Boxing & Unboxing
Giới thiệu lớp String
Giới thiệu lớp StringBuilder
Giới thiệu lớp ArrayList
Các dạng Dialog
Stream (Luồng dữ liệu)
Trang 3Value Type and Reference Type
Value Type:
Là những kiểu dữ liệu cơ sở được map trực tiếp vào FCL như int32 được map vào System.Int32 hoặc
double được map vào System.double
Giá trị Value Type được lưu trữ trên stack và lớp
được kế thừa từ System.ValueType
Ví dụ:
Int x = 10;
Double y = 30.2;
System.ValueType a = 30;
Trang 4 Reference Type
Biến được cấp phát trên vùng nhớ Heap
Tất cả các lớp trong thư viện NET hoặc do người
dùng tạo ra đều là Reference Type
Dùng toán tử new để cấp phát vùng nhớ
Ví dụ:
Object a = new ArrayList();
CHocSinh hs = new CHocSinh();
Value Type and Reference Type
Trang 5Boxing: Ép từ Value Type to Reference Type
Ví dụ:
Int32 x = 10;
object o = x ; // Implicit boxing
Console.WriteLine("The Object o = {0}",o); // prints out 10
// -Int32 x = 10;
object o = (object) x; // Explicit Boxing
Console.WriteLine("The object o = {0}",o); // prints out 10
Boxing & Unboxing
Trang 6 Unboxing: Ép từ Reference Type sang Value Type
Ví dụ:
Int32 x = 5; // declaring Int32 Int64 y = 0; // declaring Int64 double
object o = x; // Implicit Boxing
y = (Int64)o; // Explicit boxing to double
Console.WriteLine("y={0}",y);
Boxing & Unboxing
Trang 7Giới thiệu lớp String
Namespace: System
Dùng để thể hiện dạng chuỗi trong NET
Bất cứ thao tác nào liên quan đến chuỗi ta sẽ dùng lớp string để lưu trữ và xử lý
Ví dụ:
string str = “Hello World”;
Trang 8Giới thiệu lớp String
Các hàm và property
Length Lấy chiều dài chuỗi
Char <bien>[index] Truy xuất đến kí tự thứ index Index trong
chuỗi được đánh thứ tự từ 0.
<bien> = <bien> Copy
<bien> = (string)<bien>.Clone() Copy
Bool <bien>.Contains(<chuoi>) Kiểm tra tồn tại chuỗi lấy từ tham số có trong
chuỗi hiện thời.
Int IndexOf(<chuoi>) Trả về chỉ số vị trí chuỗi tìm thấy Nếu tìm
thấy, trả về vị trí; ngược lại trả về -1 Bool IndexOfAny (char[]) Kiểm tra sự tồn tại của bất kì phần tử trong
mảng kí tự tham số.
Trang 9Giới thiệu lớp String
Remove(int vitri, int sokitu) Xóa số kí tự từ vị trí xác định trong chuỗi Replace(<chuoi>) Thay thế chuỗi
Split Cắt chuỗi dựa trên kí tự cho trước.
SubString() Lấy chuỗi con
(Sinh viên dùng thư viện MSDN để tra cứu thêm các hàm
khác cũng như xem ví dụ mẫu của từng hàm)
Trang 10Ví dụ 1 : In ra từng kí tự trong chuỗi string str = “Hello World”;
string str3 = (string) str1.Clone();
Giới thiệu lớp String
Trang 11Ví dụ 3: Kiểm tra tồn tại 1 chuỗi con
string str = “Hello World”;
int vitri = str.IndexOf (“World”); // vitri = 6
int vitri = str.IndexOf (“Test”); // vitri = -1 : do không tìm thấy “Test”
Ví dụ 4: Kiểm tra tồn tại 1 kí tự bất kì
string email = “helloworld@yahoo.com”;
if (email.IndexOfAny (new char[]{‘@’, ‘.’))
Trang 12Ví dụ 5: Xóa chuỗi kí tự
string str = “abc -def”;
Console.WriteLine("1/ {0}", s)
Console.WriteLine("2/ {0}", s.Remove(3)) Console.WriteLine("3/ {0}", s.Remove(3, 3))
Trang 13Giới thiệu lớp String
Ví dụ 6: Tách chuỗi
string str = “,ONE, ,TWO,,”;
string[] sep = new string[]{“,”};
string arr[] = str.Split(sep, StringSplitOptions.None);string arr1[] = str.Split(sep,
StringSplitOptions.RemoveEmptyEntries);
Kết quả:
arr chứa 3 phần tử <>,<ONE>,<>,<TWO>,<>
arr1 chứa 2 phần tử <ONE>, <TWO>
Trang 14Giới thiệu lớp String
Ví dụ 7: Thay thế chuỗi
string str = “hello world”;
string res = str.Replace(“world”, “Lan”); Kết quả:
res có kết quả là “hello Lan”
Ví dụ 8: Lấy chuỗi con
string str = “hello world”;
string res = str.SubString(0, 2);
Kết quả:
res có kết quả là “he”
Trang 15Giới thiệu lớp String
Ví dụ 7: Gán đường dẫn
string str = “D:\\Thu muc 1\\Thu muc 2”;
Hoặc
string str = @”D:\Thu muc 1\Thu muc 2”;
Ví dụ 8: Khởi tạo định dạng chuỗi
int x = 10, y = 20;
string str = string.Format(“{0} + {1} = {2}”,x,y, x+ y);//str = “10 + 20 = 30”
Trang 16Giới thiệu lớp StringBuilder
Namespace: System.Text
Khi thao tác trên chuỗi có sử dụng thường xuyên các hàm Replace, Insert, Append thì ta nên sử dụng
StringBuilder thay vì dùng string để tăng tốc độ xử lý
Các hàm phổ biến: Replace, Insert, Append
Trang 17Giới thiệu lớp StringBuilder
Ví dụ : Thay thế chuỗi
StringBuilder sb = new StringBuilder(“Hello”);
sb.Replace (“e”, “aaa”); //sb = “Haaallo”
sb.Insert(1,”KKK”); //sb = “HaKKKaallo”
string res = sb.ToString(); //res = “Haaallo”
Trang 18Giới thiệu lớp ArrayList
ArrayList dsHS = new ArrayList();
dsHS.Add (new CHocSinh(“Lan”));
dsHS.Add (new CHocSinh(“Diep”));
Trang 19Giới thiệu lớp ArrayList
Các hàm và property
Count Đếm số phần tử trong mảng
Obect <bien>[index] Truy xuất đến đối tượng thứ index Index
trong chuỗi được đánh thứ tự từ 0.
Add(Object) Thêm vào 1 đối tượng trong mảng
Clear() Xóa tất cả các phần tử trong mảng
Contains(Object) Kiểm tra đối tượng tồn tại trong mảng
Int IndexOf(object) Trả về chỉ số vị trí object tìm thấy Nếu tìm
thấy, trả về vị trí; ngược lại trả về -1 Insert(int vitri, object) Chèn 1 đối tượng vào 1 vị trí trong mảng RemoveAt(int vitri) Xóa phần tự tại vị trí cho trước
ToArray(Type) Copy sang 1 mảng mới Array
Sort Thực hiện sắp xếp
Trang 20Giới thiệu lớp ArrayList
Ví dụ 1: Thêm và lấy phần tử dạng Value TypeArrayList dsDiem = new ArrayList();
Trang 21Giới thiệu lớp ArrayList
Ví dụ 2: Thêm và lấy phần tử dạng Reference Type
ArrayList dsPhanSo = new ArrayList();
CPhanSo ps = (CPhanSo) dsPhanSo [j];
Console.WriteLine (ps.LayTu() + “/” + ps.LayMau());}
Trang 22Giới thiệu lớp ArrayList
dsDiem.RemoveAt(1); //Xóa phần tử tại vị trí 1
dsPhanSo.Clear(); //Xóa tất cả phần tử trong mảng
int[] arrDiem = (int[]) (dsDiem.ToArray (typeof(string)));
//Trả về mảng int
Trang 25Ví dụ1:
MessageBox.Show("Hello World",
"Thi Nghiem", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
Trang 26Ví dụ 2: Nhận kết quả chọn YES/NO từ người dùngDialogResult res = MessageBox.Show(“2 lớn hơn 1",
"Thi Nghiem", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (res == DialogResult.Yes)
Console.Write("Chọn YES");
else
Console.Write("Chọn NO");
Trang 27 Dialog này dùng để chọn file đường dẫn mà người dùng muốn mở
Các hàm và thuộc tính
Tên Ý nghĩa ShowDialog() Hiển thị dialog cho người dùng chọn file
OpenFile() Mở file được chọn bởi người dùng với
quyền read-only.
FileName Cho biết tên file được chọn
Filter Bộ lọc danh sách file (file extension).
Multiselect Cho phép chọn 1 hoặc nhiều file.
FileNames Danh sách file được chọn
Trang 28string fileName = openFileDialog1.FileName;
}
Trang 30 Đặt tên file muốn lưu và lấy đường dẫn của file này
Các hàm và property: Tương tự OpenFileDialog
Trang 31 Khi muốn đọc hay ghi dữ liệu vào/ra tập tin hay muốn truyền dữ liệu từ máy này sang máy khác, ta phải tổ chức dữ liệu theo cấu trúc tuần tự các byte hay các gói tin
Trong phạm vi bài này, ta sẽ dùng Stream để thao tác đọc/ghi file
Trang 32Thao tác file
Namespace: System.IO
Thư viện:
StreamReaderStreamWritterStringReaderStringWritterFile
Có 2 dạng file : Văn bản (Text) và Binary
Trang 33Thao tác file
Kiểm tra file tồn tại:
File.Exists (string path)
Trang 34//Đọc và xuất từng dòng cho đến khi hết file.
while ((line = sr.ReadLine()) != null) //sr.ReadToEnd() {
Console.WriteLine(line);
} }
Trang 35Ghi file văn bản
Ví dụ 2: Ghi file văn bản
try {
using (StreamWriter sw = new StreamWriter("TestFile.txt")) {
sw.Write("This is the ");
sw.WriteLine("header for the file.");
sw.Write("The date is: ");
Trang 36Ghi file binary (nhị phân)
Ví dụ 3: Đọc file binary
FileStream t = new FileStream("D:\\1.data",
FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(t);
CHocSinh hs = new CHocSinh("Lan", 10);
CHocSinh hs1 = new CHocSinh("Diep", 30);
Trang 37Đọc file binary (nhị phân)
int tuoi = br.ReadInt32();
string hoten = br.ReadString();
CHocSinh hs = new CHocSinh(hoten, tuoi);
Trang 38HẾT