Метод .split() - C#
Формулировка задачи:
Итак, помогите пожалуйста написать метод сплит, или скопипастьте мне его код, пожалуйста.
Просто мне сказали не пользоваться сплитом, а писать самому. Я сделал разделитель, но не могу из него метод создать. Помогите написать метод, который через разделитель указанный сделает массив строк
Решение задачи: «Метод .split()»
textual
Листинг программы
class Program
{
private static void Main(string[] args)
{
string str = ",123,546,879,454,";
foreach (var word in str.MySplit(new []{',','.',' '}))
{
Console.WriteLine( "_{0}_",word);
}
Console.ReadLine();
}
}
public static class MyClass
{
public static string[] MySplit(this string str, char[] separators,bool withEmpty = false)
{
if (separators == null) throw new ArgumentNullException("separators");
if (str == null) throw new ArgumentNullException("str");
if (separators.Length == 0) throw new ArgumentException("Массив пустой");
if (string.IsNullOrWhiteSpace(str)) throw new ArgumentException("Строка пустая");
var list = new List<string>();
int start=-1, end=0;
string substr = string.Empty;
for (int i = 0; i < str.Length; i++)
{
if (!separators.Contains(str[i]))
continue;
// если текущий символ есть в массиве разделителей
end = i;
substr = str.Substring(start + 1, end - start - 1);
if (!withEmpty)
{
// если опция без пустых строк то не копируем если строка пустая
if (!string.IsNullOrWhiteSpace(substr))
list.Add(substr);
}
else
{
list.Add(substr);
}
start = end;
}
substr = str.Substring(end + 1, str.Length - end - 1);
if (!withEmpty)
{
// если опция без пустых строк то не копируем если строка пустая
if (!string.IsNullOrWhiteSpace(substr))
list.Add(substr);
}
else
{
list.Add(substr);
}
return list.ToArray();
}
}