public class SubstringVsSpan
public static void Main(string[] args)
string originalString = "This is a long string, with several: delimited: parts.";
Console.WriteLine("Using Substring:");
SubstringExample(originalString);
Console.WriteLine("\nUsing ReadOnlySpan<char>:");
SpanExample(originalString);
static void SubstringExample(string text)
while ((colonIndex = text.IndexOf(':', startIndex)) != -1)
string part = text.Substring(startIndex, colonIndex - startIndex);
startIndex = colonIndex + 1;
string lastPart = text.Substring(startIndex);
ProcessStringPart(lastPart);
static void SpanExample(string text)
ReadOnlySpan<char> textSpan = text.AsSpan();
while ((colonIndex = textSpan.IndexOf(':')) != -1)
ReadOnlySpan<char> part = textSpan.Slice(startIndex, colonIndex - startIndex);
textSpan = textSpan.Slice(colonIndex + 1);
ProcessSpanPart(textSpan);
static void ProcessStringPart(string part)
Console.WriteLine($" Processing string: '{part}'");
static void ProcessSpanPart(ReadOnlySpan<char> part)
Console.WriteLine($" Processing span: '{part.ToString()}'");
if (part.SequenceEqual("delimited")) {
Console.WriteLine(" Found the 'delimited' part!");