Добавить разделитель в строку в каждом N символов? - PullRequest
61 голосов
/ 29 марта 2012

У меня есть строка, которая содержит двоичные цифры.Как отделить строку после каждых 8 цифр?

Предположим, что строка:

string x = "111111110000000011111111000000001111111100000000";

Я хочу добавить разделитель (запятую) после каждых 8 символов.

выходные данные должны быть:

"11111111,00000000,11111111,00000000,11111111,00000000,"

Затем я хочу отправить его в список <> последние 8 символов 1-го, затем предыдущие 8 символов (исключая,) и т. д.

Как можноЯ делаю это?

Ответы [ 13 ]

0 голосов
/ 09 декабря 2017

Я опоздал с ответом, но вы можете использовать этот:

    static string PutLineBreak(string str, int split)
    {
        for (int a = 1; a <= str.Length; a++)
        {
            if (a % split == 0)
                str = str.Insert(a, "\n");
        }

        return str;
    }
0 голосов
/ 13 августа 2015

Немного опоздал на вечеринку, но вот упрощенное выражение LINQ для разбиения входной строки x на группы по n, разделенные другой строкой sep:

string sep = ",";
int n = 8;
string result = String.Join(sep, x.InSetsOf(n).Select(g => new String(g.ToArray())));

Краткое изложение того, что здесь происходит:

  • x рассматривается как IEnumberable<char>, где InSetsOf добавляется метод расширения.
  • InSetsOf(n) группирует символы в IEnumerable из IEnumerable - каждая запись во внешней группе содержит внутреннюю группу из n символов.
  • Внутри метода Select каждая группа из n символов превращается обратно в строку с помощью конструктора String(), который принимает массив chars.
  • РезультатSelect теперь является IEnumerable<string>, который передается в String.Join для чередования строки sep, как и любой другой пример.
0 голосов
/ 26 августа 2014

Это намного быстрее без копирования массива (эта версия вставляет пробел каждые 3 цифры, но вы можете настроить его в соответствии со своими потребностями)

public string GetString(double valueField)
{
    char[] ins = valueField.ToString().ToCharArray();
    int length = ins.Length + (ins.Length / 3);
    if (ins.Length % 3 == 0)
    {
        length--;
    }
    char[] outs = new char[length];

    int i = length - 1;
    int j = ins.Length - 1;
    int k = 0;
    do
    {
        if (k == 3)
        {
            outs[i--] = ' ';
            k = 0;
        }
        else
        {
            outs[i--] = ins[j--];
            k++;
        }           
    }
    while (i >= 0);

    return new string(outs);
}
...