2016-03-30 2 views
0

Я хочу разбить строку на определенную длину, но я также хочу убедиться, что это полное слово. Например, если бы я был:Разделить строку по длине с добавленным условием

string str = "Hello I have a dog "; 

, и я хотел разбить его на куски 5 Я хотел бы сделать что-то вроде этого (который я получил от Split String into smaller Strings by length variable):

public IEnumerable<string> SplitByLength(string s, int length) 
{ 
    for (int i = 0; i < s.Length; i += length) 
    { 
     if (i + length <= s.Length) 
     { 
      yield return s.Substring(i, length); 
     } 
     else 
     { 
      yield return s.Substring(i); 
     } 
    } 
} 

, но это приведет к в выходе, таком как

"Hello" 
"I Hav" 
"e a d" 
"og" 

Как я мог адаптировать его так, чтобы он разделился после 5 или после пробела? Так что я хотел бы получить:

"Hello" 
"I" 
"Have" 

Это не лучший пример, но это лучшее, что я мог придумать с верхней части моей головы. Причина, по которой мне это нужно, это то, что я показываю результаты на веб-странице, и после определенного количества слов ее трудно читать из-за фонового изображения, поэтому, когда она достигает предела, она ломает строку, но я не нажимаю «Не хочу половину слова на одной строке, а вторую половину на следующей строке.

+0

разделить их после того, как пространства? поэтому, когда вы находите разделение пространства – Haris

+1

Почему бы не 's.Split ('');'? – Guy

+4

Если ваша проблема заключается в текстовом представлении на веб-странице, вы должны изучить HTML/CSS вместо разделения текста, потому что что происходит с разными размерами экрана и т. Д.? –

ответ

0

следует использовать, если/иначе

   if (i + length <= s.Length) 
       { 
        yield return s.Substring(i, length); 
       } 
       else if(s[i] == ' ') 
       { 
        yield return s.Substring(i, s.IndexOf(" ",i) - i); 
       } 
       else 
       { 
        yield return s.Substring(i); 
       } 
Смежные вопросы