Разделить строку по длине - PullRequest
2 голосов
/ 18 июня 2009

У меня есть строковое значение длиной 5000+ символов, я хочу разделить его на 76 символов с новой строкой в ​​конце каждого из 76 символов. Как это сделать в C #?

Ответы [ 13 ]

0 голосов
/ 18 июня 2009

Строка - 5000 символов ... Я не думаю, что скорость действительно важна, если вы не делаете это тысячи или даже миллионы раз, особенно когда ОП даже не упоминал, что скорость важна. Преждевременная оптимизация?

Я бы, вероятно, использовал рекурсию, так как, на мой взгляд, это приведет к простейшему коду.

Это может быть не правильно, как я знаю .NET, но не C #.

String ChunkString(String s, Integer chunkLength) {
    if (s.Length <= chunkLength) return s;
    return String.Concat(s.Substring(0, chunkLength), 
                         ChunkString(s.Substring(chunkLength)));
}
0 голосов
/ 18 июня 2009

Еще один .... (первый раз через медленные, последующие запуски, аналогично более быстрому времени, указанному выше)

private void button1_Click(object sender, EventArgs e)
{
  string chopMe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  Stopwatch sw = new Stopwatch();
  sw.Start();
  string result = string.Join("\r\n", ChopString(chopMe).ToArray());
  sw.Stop();
  MessageBox.Show(result + " " + sw.ToString());
}


public IEnumerable<string> ChopString(string s)
{
  int i = 0;
  while (i < s.Length)
  {
    yield return i + PARTLENGTH <= s.Length ? s.Substring(i,PARTLENGTH) :s.Substring(i) ;
    i += PARTLENGTH;
  }
}

Редактировать: мне было любопытно посмотреть, как быстро подстрока была ...

0 голосов
/ 18 июня 2009

В конце концов, это было бы то, что я бы использовал, я думаю

    static string fredou()
    {
        string s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        int partLength = 12;

        int stringLength = s.Length;
        StringBuilder n = new StringBuilder(stringLength + (int)(stringLength / partLength) + 1);
        int chopSize = 0;
        int pos = 0;

        while (pos < stringLength)
        {
            chopSize = (pos + partLength) < stringLength ? partLength : stringLength - pos;
            n.Append(s , pos, chopSize);
            n.Append("\r\n");
            pos += chopSize;
        }

        return n.ToString();         
    }

, глядя на AppendLine под отражателем:

    <ComVisible(False)> _
    Public Function AppendLine(ByVal value As String) As StringBuilder
        Me.Append(value)
        Return Me.Append(Environment.NewLine)
    End Function

    Public Shared ReadOnly Property NewLine As String
        Get
            Return ChrW(13) & ChrW(10)
        End Get
    End Property

Для меня, по скорости, делая это вручную> AppendLine

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...