2012-11-13 38 views

Trả lời

27

Bạn cần chia chuỗi. Bạn có thể sử dụng overload không có tham số (khoảng trắng được giả định).

IEnumerable<string> words = str.Split().Take(250); 

Lưu ý rằng bạn cần thêm using System.Linq cho Enumerable.Take.

Bạn có thể sử dụng ToList() hoặc ToArray() ro tạo ra một bộ sưu tập mới từ truy vấn hoặc tiết kiệm bộ nhớ và liệt kê nó trực tiếp:

foreach(string word in words) 
    Console.WriteLine(word); 

Cập nhật

Kể từ khi nó có vẻ là khá phổ biến Tôi đang thêm phần mở rộng sau đây là hiệu quả hơn so với cách tiếp cận Enumerable.Take và cũng trả về một bộ sưu tập thay vì (hoãn thực thi) truy vấn.

Nó sử dụng String.Split trong đó white-space characters được giả định là dấu phân cách nếu thông số dấu tách là null hoặc không chứa ký tự. Nhưng phương pháp này cũng cho phép để vượt qua delimiters khác nhau:

public static string[] GetWords(
     this string input, 
     int count = -1, 
     string[] wordDelimiter = null, 
     StringSplitOptions options = StringSplitOptions.None) 
{ 
    if (string.IsNullOrEmpty(input)) return new string[] { }; 

    if(count < 0) 
     return input.Split(wordDelimiter, options); 

    string[] words = input.Split(wordDelimiter, count + 1, options); 
    if (words.Length <= count) 
     return words; // not so many words found 

    // remove last "word" since that contains the rest of the string 
    Array.Resize(ref words, words.Length - 1); 

    return words; 
} 

Nó có thể được sử dụng một cách dễ dàng:

string str = "A B C D E F"; 
string[] words = str.GetWords(5, null, StringSplitOptions.RemoveEmptyEntries); // A,B,C,D,E 
+1

"Nếu tham số dấu tách là null hoặc không chứa ký tự, thì ký tự khoảng trống được giả định là dấu phân cách." –

+0

+1 ... Ngoài ra nếu câu hỏi là thực sự thì việc tìm kiếm không gian/khoảng trống/dấu tách sẽ thích hợp hơn (như "\ w + \ s"), có thể kết hợp với 'lợi nhuận' để không đọc 250 từ đầu tiên. –

+0

@AlexeiLevenkov: Lưu ý rằng 'Tách' không có đối số không giống với' Tách ('') '. Nó sử dụng ['Char.IsWhiteSpace'] (http://msdn.microsoft.com/en-us/library/t809ektx.aspx) nội bộ bao gồm nhiều ký tự. –

9
yourString.Split(' ').Take(250); 

Tôi đoán vậy. Bạn nên cung cấp thêm thông tin.

+8

Tại sao bạn tạo danh sách mới từ mảng trước khi bạn lấy 250? –

+0

Tôi muốn sử dụng trước khi ToList tận dụng lợi thế của đánh giá lười biếng của IEnumerable – BlackBear

+0

@TimSchmelter Mẹo từ bộ nhớ. Tôi đã không chắc chắn nếu Array là IEnumerable. Nó không phải là một số phiên bản C# trước đây. Chỉnh sửa. Cảm ơn. – LMB

1
string testString = "The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dog." 
string firstWords = Regex.Match(testString, @"^(\w+\b.*?){250}").ToString(); 
0

bổ sung Tim trả lời, đây là những gì bạn có thể thử

IEnumerable<string> words = str.Split().Take(250); 
StringBuilder firstwords = new StringBuilder(); 
foreach(string s in words) 
{ 
    firstwords.Append(s + " "); 
} 
firstwords.Append("..."); 
Console.WriteLine(firstwords.ToString()); 
4

String.Join ("", yourstring.Split() Lấy (250) .ToArray())

0

Hãy thử cái này:

public string TakeWords(string str,int wordCount) 
{ 
    char lastChar='\0'; 
    int spaceFound=0; 
    var strLen= str.Length; 
    int i=0; 
    for(; i<strLen; i++) 
    { 
     if(str[i]==' ' && lastChar!=' ') 
     { 
      spaceFound++; 
     } 
     lastChar=str[i]; 
     if(spaceFound==wordCount) 
      break; 
    } 
    return str.Substring(0,i); 
} 
0

Có thể không gọi Take().

string[] separatedWords = stringToProcess.Split(new char[] {' '}, 250, StringSplitOptions.RemoveEmptyEntries); 

Điều này cũng cho phép chia tách dựa trên nhiều không gian hơn "" và do đó khắc phục sự cố khi không gian bị thiếu không chính xác trong đầu vào.

string[] separatedWords = stringToProcess.Split(new char[] {' ', '.', ',' ':', ';'}, 250, StringSplitOptions.RemoveEmptyEntries); 

Sử dụng StringSplitOptions.None, nếu bạn muốn trả lại chuỗi trống.

Các vấn đề liên quan