Split string into fixed length blocks
suggest changeWe cannot break a string into arbitrary points (because a System.Char
may not be valid alone because it’s a combining character or part of a surrogate) then code must take that into account (note that with length I mean the number of graphemes not the number of code-units):
public static IEnumerable<string> Split(this string value, int desiredLength) { var characters = StringInfo.GetTextElementEnumerator(value); while (characters.MoveNext()) yield return String.Concat(Take(characters, desiredLength)); } private static IEnumerable<string> Take(TextElementEnumerator enumerator, int count) { for (int i = 0; i < count; ++i) { yield return (string)enumerator.Current; if (!enumerator.MoveNext()) yield break; } }
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents