расщепление строк на основе номера символа - PullRequest
4 голосов
/ 24 мая 2010
string data = "0000062456"

как разбить эту строку на 5 частей, чтобы у меня было:

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

Ответы [ 4 ]

7 голосов
/ 24 мая 2010

Если вы заинтересованы в решении LINQ:

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

Где вы можете заменить 2 на любое число, которое хотите.

4 голосов
/ 24 мая 2010

Использование 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);

Конечно, это можно легко преобразовать в функцию, используя индекс, из которого вам нужна подстрока:

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

Если вы действительно хотите стать модным, вы также можете создать метод расширения.

public static string getFromIndex(this string str, int arrIndex, int length)
{
   return str.Substring(arrIndex * 2, length);
}
2 голосов
/ 24 мая 2010

Редактировать: Неверный язык

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));
}
0 голосов
/ 24 мая 2010

Это, вероятно, немного излишне для строки, поскольку Substring достаточно удобно, но общий вопрос заключается в том, как разбить коллекцию на подгруппы заданного размера. Библиотека MoreLinq имеет такую ​​функцию: Batch.
Он также может принимать лямбда-выражение в качестве второго параметра для непосредственного преобразования подгрупп, поэтому решение может быть следующим:

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

Вышесказанное работает для .Net 4.0. На 3.5 Concat нужен массив, поэтому мы можем использовать ToArray или:

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

Приятным побочным эффектом этого подхода является то, что он защищает вас от крайнего случая - он будет работать, как и ожидалось, даже если длина вашей строки не делится равномерно по длине подстрок.

...