views:

86

answers:

4
string data = "0000062456"

how to split this string on 5 pieces so that I have:

part[0] = "00";
part[1] = "00";
part[2] = "06";
part[3] = "24";
part[4] = "56";
+3  A: 

Use Substring(int32, int32):

part[0] = myString.Substring(0,2);
part[1] = myString.Substring(2,2);
part[2] = myString.Substring(4,2);
part[3] = myString.Substring(6,2);
part[4] = myString.Substring(8,2);

This can of course be easily converted to a function, using the index you need the substring from:

string getFromIndex(int arrIndex, int length)
{
   return myString.Substring(arrIndex * 2, length);
}

If you really want to get fancy, you can create an extension method as well.

public static string getFromIndex(this string str, int arrIndex, int length)
{
   return str.Substring(arrIndex * 2, length);
}
Oded
+2  A: 

Edit: Wrong language

string str = "0000062456";
List<string> parts = new List<string>();
for (Int32 i = 0; i <= (str.Length / 2 - 1); i++) 
{
    parts.Add(str.Substring(i * 2, 2));
}
ho1
+6  A: 

In case you are interested in a LINQ solution:

IEnumerable<string> result = Enumerable
    .Range(0, s.Length / 2)
    .Select(i => s.Substring(i * 2, 2));

Where you can replace 2 by any number you would like.

Darin Dimitrov
A: 

This probably a bit of an overkill for a string, since Substring is handy enough, but the general question is how to split a collection into subgroups of a given size. The library MoreLinq has such a function: Batch.
It can also take a lambda expression as the second parameter to convert the subgroups directly, so a solution can be:

IEnumerable<string> parts = str.Batch(2, String.Concat);

The above works for .Net 4.0. On 3.5 Concat need an array, so we can use ToArray or:

IEnumerable<string> parts = str.Batch(2, chars => new String(chars.ToArray()));

A nice side effect of this approach is that it protects you from edge case - it will work as expected even the length of your string doesn't divide evenly in the length on the sub-strings.

Kobi