Home > C# > Tìm hiểu class String trong .NET

Tìm hiểu class String trong .NET

Cơ bản về String

Định nghĩa:

Chuỗi (string) là một tập hợp các ký tự Unicode liên tiếp nhau dùng để hiển thị thông tin text.

Một đối tượng String (String object) là một tập hợp các objects System.Char để hiển thị một chuỗi.

Cú pháp khai báo chuỗi : 

string ten_bien;

Các biến kiểu string không có giá trị mặc định, do đó trước khi truy xuất hoặc sử dụng, bạn phải gán giá trị cho nó.

Ví dụ:

string str1;
Console.WriteLine(str1); // Báo lỗi “Use of unassigned local variable ‘str1’”
string str2 = “”;
Console.WriteLine(str2); // hợp lệ

Giá trị của đối tượng String là nội dung của một tập hợp liên tiếp có thứ tự

Giá trị của chuỗi là bất biến, do đó một chuỗi sẽ không thể thay đổi được ( tức là chỉ đọc ). Do đó nếu bạn thực hiện thao tác nào đó với một chuỗi để sinh ra chuỗi mới thì bạn cần phải gán giá trị thu được cho một biến nào đó.

Ví dụ :

string str = “hello”;
 str.ToUpper(); // Trường hợp này str không đổi
 Console.WriteLine(str); // Kết quả :  “hello”
 str=str.ToUpper(); // str được gán bằng chuỗi mới in hoa tất cả các ký tự
 Console.WriteLine(str); // Kết quả : “HELLO”

Kích thước tối đa của một đối tượng String trong bộ nhớ là 2 GB hay khoảng 1 tỷ ký tự. Chuỗi trong .NET là kiểu tham chiếu (reference type), do đó nó được quản lý ở bộ nhớ heap trong .NET và chúng được quản lý bởi bộ thu gom rác của .NET (.NET Garbage Collector). Khác với các kiểu giá trị (value type), string không được tự động hủy khi chúng không còn nằm trong phạm vi sử dụng.

Các ký tự Escape

Các ký tự escape sẽ định nghĩa cách chuỗi được in ra.

Các ký tự escape được bắt đầu bởi dấu chéo ngược “\” (backslash) và theo sau là một ký tự. Các ký tự escape hay được sử dụng gồm :

  • \’ Thêm vào một dấu nháy đơn
  • \” Thêm vào một dấu nháy kép
  • \\ Thêm vào ký tự xuyệt (“\”)
  • \a Kích hoạt một cảnh báo hệ thống
  • \n Thêm một dòng mới
  • \r Chuyển qua đoạn văn mới
  • \t Thêm một tab

Các chuỗi nguyên mẫu (Verbatim Strings)

Để hiển thị chuỗi chính xác như khi chúng ta nhập chuỗi vào, bạn chỉ cần thêm ký tự @ vào đầu chuỗi.

Ví dụ :

string str1 = “C:\\Program Files\\Microsoft ASP.NET”;
Console.WriteLine(str1); // Kết quả : C:\Program Files\Microsoft ASP.NET
string str2 = @“C:\Program Files\Microsoft ASP.NET”;
Console.WriteLine(str2); // Kết quả : C:\Program Files\Microsoft ASP.NET

Cụ thể hóa một đối tượng String (Instantiating a String Object)

Bạn có thể cụ thể hóa một đối tượng String bằng một trong các cách sau :

  • Gán 1 chuỗi tường minh cho một biến String. Đây là phương thức được sử dụng phổ biến nhất để tạo một chuỗi.

Ví dụ :

string str = “Khai bao 1 chuoi”;
  • Gọi 1 constructor (hàm tạo) của lớp String

Ví dụ sau sẽ cụ thể hóa các chuỗi bằng cách gọi một vài constructor của lớp String. Chú ý rằng một vài constructor bao gồm con trỏ trỏ đến các mảng ký tự hoặc các mảng byte có dấu (signed byte) như là các tham số. Visual Basic không hỗ trợ gọi các constructor này

char[] chars = { 'w', 'o', 'r', 'd' };
sbyte[] bytes = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x00 };
// Tao 1 string tu mot mang cac ky tu
string string1 = new string(chars);
Console.WriteLine(string1); // Ket qua : word
// Tao 1 string bao gom mot ky tu lap lai 20 lan
string string2 = new string('c', 20);
Console.WriteLine(string2); // Ket qua : cccccccccccccccccccc
string stringFromBytes = null;
string stringFromChars = null;
unsafe
{
    fixed (sbyte* pbytes = bytes)
    {
        // Tao 1 string tu 1 con tro tro den mot mang byte co dau
        stringFromBytes = new string(pbytes);
    }
    fixed (char* pchars = chars)
    {
        // Tao 1 string tu 1 con tro tro den mot mang ky tu
        stringFromChars = new string(pchars);
    }
}
Console.WriteLine(stringFromBytes);// Ket qua : ABCD
Console.WriteLine(stringFromChars);// Ket qua : word

Chú ý là để sử dụng con trỏ trong C#, bạn khai báo nó ở trong vùng code unsafe. Và bạn phải chọn Allow unsafe code khi Build cho project của bạn.

  • Sử dụng toán tử ghép chuỗi ( + trong C# và & hoặc + trong Visual Basic ) để tạo ra một chuỗi đơn từ nhiều thể hiện của chuỗi kết hợp lại
Ví dụ :
string string1 = "Today is " + DateTime.Now.ToString("D") + ".";
Console.WriteLine(string1); 
// Kết quả : Today is Friday, June 08, 2012.
string string2 = "This is " + "one ";
string2 += " sentence.";
Console.WriteLine(string2); 
// Kết quả : This is one sentence.
  • Lấy một thuộc tính hoặc gọi một phương thức trả về một string. Ví dụ sau sử dụng các phương thức của lớp String để trích ra một chuỗi con từ 1 chuỗi lớn
string sentence = "This sentence has five words.";
// Extract the second word.
int startPosition = sentence.IndexOf(" ") + 1;
string word2 = sentence.Substring(startPosition,
               sentence.IndexOf(" ", startPosition) - startPosition);
Console.WriteLine("Second word: " + word2);
 // Kết quả : Second word: sentence
  • Gọi một phương thức format để chuyển một giá trị hoặc đối tượng sang chuỗi hiển thị của nó. Ví dụ sau sử dụng tính năng Composite Formatting  để gắn chuỗi hiển thị của 2 đối tượng thành 1 string.
DateTime dateAndTime = new DateTime(2011, 7, 6, 7, 32, 0);
double temperature = 68.3;
string result = String.Format("At {0:t} on {0:D}, the temperature was 
               {1:F1} degrees Fahrenheit.",dateAndTime, temperature);
Console.WriteLine(result); 
 // Kết quả : At 7:32 AM on Wednesday, July 06, 2011, 
//the temperature was 68.3 degrees Fahrenheit.

Index trong String

Một index (chỉ số) là vị trí của một đối tượng Char ( không phải là một ký tự Unicode) trong một String

Một index là một số không âm bắt đầu từ vị trí đầu tiên trong chuỗi.

Vị trí đầu tiên có index = 0

Một số phương thức tìm kiếm chẳng hạn như IndexOf và LastIndexOf trả về chỉ số của một ký tự hoặc một chuỗi con trong chuỗi thể hiện.

  • Thuộc tính Char cho phép bạn có thể phân chia các đối tượng Char bởi vị trí index trong chuỗi.

Ví dụ sau thực hiện việc tìm kiếm các khoảng trống hoặc ký tự chấm câu trong chuỗi để xác định xem chuỗi chứa bao nhiêu từ.

string s1 = "This string consists of a single short sentence.";
int nWords = 0;
s1 = s1.Trim(); 
for (int ctr = 0; ctr < s1.Length; ctr++) {
    if (Char.IsPunctuation(s1[ctr]) | Char.IsWhiteSpace(s1[ctr]))
       nWords++; 
}
Console.WriteLine("The sentence\n {0}\nhas {1} words.",
                   s1, nWords); 
// Kết quả : 
// The sentence
// This string consists of a single short sentence.
// has 8 words.
  • Bởi vì lớp String implement từ interface IEnumerable, do đó bạn có thể duyệt qua các đối tượng Char trong một chuỗi bằng cách sử dụng foreach như ví dụ sau :
string s1 = "This string consists of a single short sentence.";
int nWords = 0;
s1 = s1.Trim(); 
foreach (var ch in s1) {
    if (Char.IsPunctuation(ch) | Char.IsWhiteSpace(ch))
        nWords++; 
}
Console.WriteLine("The sentence\n {0}\nhas {1} words.",
                   s1, nWords);
// Kết quả : 
// The sentence
// This string consists of a single short sentence.
// has 8 words.
  • Các giá trị index liên tiếp có thể không đúng với các ký tự Unicode, bởi vì một ký tự Unicode có thể được mã hóa bởi nhiều hơn một đối tượng Char. Để làm việc với ký tự Unicode thay vì đối tượng Char,  ta có thể sử dụng các lớp System.Globalization.StringInfo và TextElementEnumerator.
Advertisements
Categories: C#
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: