Tôi đang thực hiện phân tích cú pháp nhập chuỗi đơn giản và tôi đang cần một mã thông báo chuỗi. Tôi chưa quen với C # nhưng đã lập trình Java và có vẻ tự nhiên là C # nên có mã thông báo chuỗi. Phải không? Nó đâu rồi? Làm thế nào để tôi sử dụng nó?
Bạn có thể sử dụng phương thức String.Split .
class ExampleClass
{
public ExampleClass()
{
string exampleString = "there is a cat";
// Split string on spaces. This will separate all the words in a string
string[] words = exampleString.Split(' ');
foreach (string Word in words)
{
Console.WriteLine(Word);
// there
// is
// a
// cat
}
}
}
Để biết thêm thông tin, hãy xem Bài viết của Sam Allen về việc tách chuỗi trong c # (Hiệu suất, Regex)
Tôi chỉ muốn làm nổi bật sức mạnh của phương pháp Chia của C # và đưa ra một so sánh chi tiết hơn, đặc biệt là từ một người đến từ nền tảng Java.
Trong khi StringTokenizer trong Java chỉ cho phép một dấu phân cách duy nhất, chúng ta thực sự có thể phân tách trên nhiều dấu phân cách làm cho các biểu thức chính quy trở nên ít cần thiết hơn (mặc dù nếu ai đó cần regex, hãy sử dụng regex bằng mọi cách!)
str.Split(new char[] { ' ', '.', '?' })
Điều này phân tách trên ba dấu phân cách khác nhau trả về một loạt các mã thông báo. Chúng ta cũng có thể loại bỏ các mảng trống với tham số thứ hai cho ví dụ trên:
str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries)
Một điều mà Mã thông báo chuỗi của Java có mà tôi tin rằng C # đang thiếu (ít nhất Java 7 có tính năng này) là khả năng giữ (các) dấu phân cách làm mã thông báo. Chia tách của C # sẽ loại bỏ các mã thông báo Điều này có thể quan trọng khi nói một số ứng dụng NLP, nhưng đối với các ứng dụng có mục đích chung hơn thì đây có thể không phải là vấn đề.
Phương thức phân tách của một chuỗi là những gì bạn cần. Trong thực tế, lớp mã thông báo trong Java không được dùng trong phương thức phân tách chuỗi của Java.
Tôi nghĩ rằng gần nhất trong .NET Framework là
[.__.] chuỗi.Split () [.__.]
Để phân tách phức tạp, bạn có thể sử dụng regex tạo bộ sưu tập khớp.
_words = new List<string>(YourText.ToLower().Trim('\n', '\r').Split(' ').
Select(x => new string(x.Where(Char.IsLetter).ToArray())));
Hoặc là
_words = new List<string>(YourText.Trim('\n', '\r').Split(' ').
Select(x => new string(x.Where(Char.IsLetterOrDigit).ToArray())));
sử dụng Regex.Split(string,"#|#");
Tương tự như phương thức của Java là:
Regex.Split(string, pattern);
ở đâu
string
- văn bản bạn cần táchpattern
- mẫu kiểu chuỗi, phân tách văn bản là gìđọc cái này, hàm split có một quá tải mất một mảng bao gồm các bộ tách biệt http://msdn.Microsoft.com/en-us/l Library/system.stringsplitoptions.aspx