C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Program: We use a const string from the metadata to instantiate the StringReader instance.
ReadLine: We can then read each line individually from the string data, in a way similar to reading a file with StreamReader.
String LiteralStreamReaderWhile: The while-loop uses an embedded assignment and checks the string variable result for null to detect the end of file condition.
WhileC# program that uses StringReader
using System;
using System.IO;
class Program
{
const string _input = @"The Dev Codes
is a website
you are reading";
static void Main()
{
// Creates new StringReader instance from System.IO
using (StringReader reader = new StringReader(_input))
{
// Loop over the lines in the string.
int count = 0;
string line;
while ((line = reader.ReadLine()) != null)
{
count++;
Console.WriteLine("Line {0}: {1}", count, line);
}
}
}
}
Output
Line 1: The Dev Codes
Line 2: is a website
Line 3: you are reading
Tip: StringReader internally stores only one string. It allocates and copies new strings each time you call Read methods.
Methods: The two methods, Method1 and Method2, both count the number of non-newline characters in the lines.
Result: We find that StringReader is much faster than Split. This is likely because no arrays were needed.
And: With StringReader, each line could be brought into memory as a string object as we go along.
Tip: If you need to separate a string into lines and do not need an array, the StringReader may be more efficient than Split.
C# program that tests StringReader and Split
using System;
using System.Diagnostics;
using System.IO;
class Program
{
static int Method1(string data)
{
int count = 0;
using (StringReader reader = new StringReader(data))
{
while (true)
{
string line = reader.ReadLine();
if (line == null)
{
break;
}
count += line.Length;
}
}
return count;
}
static int Method2(string data)
{
int count = 0;
string[] lines = data.Split(new char[] { '\n' });
foreach (string line in lines)
{
count += line.Length;
}
return count;
}
static void Main()
{
const string data = "Dot\nNet\nPerls\nIs a website\nDo you like it?";
Console.WriteLine(Method1(data));
Console.WriteLine(Method2(data));
const int max = 1000000;
var s1 = Stopwatch.StartNew();
for (int i = 0; i < max; i++)
{
Method1(data);
}
s1.Stop();
var s2 = Stopwatch.StartNew();
for (int i = 0; i < max; i++)
{
Method2(data);
}
s2.Stop();
Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) /
max).ToString("0.00 ns"));
Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000000) /
max).ToString("0.00 ns"));
Console.Read();
}
}
Output
38
38
314.09 ns (StringReader)
374.67 ns (Split)