2

Is there a way to do the following:

string str = "[A]     [C]     [E] [F]";

and then splitting the string down to a collection looking like:

List<string> myList = {"[A]", "   ", "[C]", "   ", "[E]", "[F]"}

In text: Is there a way to split the string by taking 3, then skipping 1. There is no ending space. Otherwise the following had worked fine: https://stackoverflow.com/a/1450797/14375615

I can't just add 1 to length, that just caused an error because the last item wasn't 4 chars long

jps
  • 20,041
  • 15
  • 75
  • 79

2 Answers2

3

I'd try different approach than method indicated in the other question. It's more straight forwardly handling the last segment if its length is smaller than chunkSize:

static IEnumerable<string> Split(string str, int chunkSize, int gapSize)
{
    var index = 0;
    
    while (index < str.Length - chunkSize - 1)
    {
        yield return str.Substring(index, chunkSize);
        index += chunkSize + gapSize;
    }
    
    if (str.Length - index > 0)
    {
        yield return str.Substring(index, str.Length - index);
    }
}

Then usage:

 Split(str, 3, 1)

will produce desired result.

Maku
  • 1,464
  • 11
  • 20
0

This could be a viable solution if you don't mind using Lists:

string str = "[A]     [C]     [E] [F]";
List<string> test = new List<string>();
int index = 0;
bool looping = true;

do
{
    test.Add(str.Substring(index, 3));

    str = str.Remove(0, 3);

    if (str.Count() > 0)
        str = str.Remove(0, 1);
    else if (str.Count() == 0)
        looping = false;
} while (looping);

foreach (var substr in test)
{
    Console.WriteLine(substr);
}
sMuLe
  • 123
  • 8