2017-02-23 16 views
-2

Привет У меня есть абзац строки, содержащий 25 слов и 300 символов, я хочу установить его в наборе меток, который может содержать до 40 символов. Я пытаюсь сделать это как ниже кода с длиной символов.Разделить строку на более мелкие слова переменной длины в C#

public static List<string> _mSplitByLength(this string str, int maxLength) 
{ 
    List<string> _a = new List<string>(); 
    for (int index = 0; index < str.Length; index += maxLength) 
    { 
     _a.Add(str.Substring(index, Math.Min(maxLength, str.Length - index))); 
    } 
    return _a; 
} 

с вышеуказанным кодом я могу разделить строку на 40 символов, но проблема в том, что она также разделяет слова.

Предположим, моя строка "My school Name is stack over flow High school.", которая составляет 46 символов, так с мой код его получения, как этот

list 1 = "My school Name is stack over flow High s" 
list 2 = "chool." 

Мой вопрос в том, как разбить строку на основе слов. если последнее слово не отправляется, поэтому оно должно быть перенесено в следующий список.

моя цель

list 1 = "My school Name is stack over flow High " 
list 2 = "school." 

ответ

2

Попробуйте это:

string text = "My school Name is stack over flow High school."; 
List<string> lines = 
    text 
     .Split(' ') 
     .Aggregate(new [] { "" }.ToList(), (a, x) => 
     { 
      var last = a[a.Count - 1]; 
      if ((last + " " + x).Length > 40) 
      { 
       a.Add(x); 
      } 
      else 
      { 
       a[a.Count - 1] = (last + " " + x).Trim(); 
      } 
      return a; 
     }); 

я получаю это:

 
My school Name is stack over flow High 
school.