2010-05-24 4 views
4
string data = "0000062456" 

как разделить эту строку на 5 штук, так что у меня есть:строка расщепление в зависимости от количества полукокса

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

Не помещайте метки в заголовки (C#). Кроме того, у C# нет возможности разделить строки - это .NET Framework имеет класс 'System.String'. Вот почему я добавил .NET к вашим тегам. –

ответ

4

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

Edit: Неправильный язык

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)); 
} 
7

В случае, если вы заинтересованы в решении LINQ:

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

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

+0

Помните, что это будет работать только со строками, которые точно делятся на длину подстроки (2 символа в примере). В моем случае мне нужно было также захватить последнюю подстроку, которая была короче остальных. Изменение легко, но без него у вас будет меньше строк, чем вы могли бы захотеть. –

0

Это, вероятно, немного перебор для строки, так как 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())); 

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

Смежные вопросы