Разбить длинную строку на подстроку на основе количества символов в C # - PullRequest
3 голосов
/ 17 декабря 2009

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

weygjjsgdgkweygwjiewlewegygciefewjknfkeuwyfjkdygwfsn

в

"weygjjsgdgk"

"weygwjiewle"

"wegygciefew"

"jknfkeuwyfj"

"kdygwfsn"

кусками по 10 символов ... и отформатировать его как "" снаружи ... как я могу это сделать?

Ответы [ 7 ]

3 голосов
/ 28 декабря 2009

Подход Regex

string instr = "weygjjsgdgkweygwjiewlewegygciefewjknfkeuwyfjkdygwfsn";

string results = Regex.Replace(instr, "(.{1,11})", "\"$1\"\n");

Console.WriteLine(results);

Результаты

"weygjjsgdgk"
"weygwjiewle"
"wegygciefew"
"jknfkeuwyfj"
"kdygwfsn"
1 голос
/ 09 июля 2013

Еще один метод:

private static string[] SplitBy(string source, int count)
{
    const string Separator = "╩";
    var byCount = source.Select((c, i) => i % count == 0 ? Separator + c : c.ToString()).ToArray();
    var inString = string.Join(string.Empty, byCount);
    return inString.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries);
}

Пример использования:

var splitted = SplitBy("some very long str", 5);

Результат:

some 
very 
long 
str
1 голос
/ 17 декабря 2009
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "012345678901234567890";
            int remaining = input.Length;

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < input.Length; i+=10)
            {                
                sb.Append('"').Append(input.Substring(i, Math.Min(10, remaining))).Append('"');
                remaining -= 10;
            }
            Console.WriteLine(sb.ToString());
        }
    }
}
0 голосов
/ 28 декабря 2009
foreach(var text in "abcdefghijklmnopqrstuvwxyz".SplitString(5))
{
    Debug.WriteLine(text);
}

public static IEnumerable<string> SplitString(this string input, int outputStringLength)
{
    var count = 0;
    while (count < input.Length)
    {
        var length = Math.Min(outputStringLength, input.Length - count);
        yield return string.Format("\"{0}\"", input.Substring(count, length));
        count += outputStringLength;
    }
}
0 голосов
/ 17 декабря 2009

Может быть, немного более быстрый подход - должен быть быстрее для более длинных строк.

static void Main(string[] args)
{
    string input = "012345678901234567890";

    // Create a StringBuilder with enough space
    StringBuilder sb = new StringBuilder(input.Length + input.Length / 10 * 3 + 3);

    sb.Append('"');
    for (int n = 0; n < input.Length; n++)
    {
        // don't add if this is the first char
        if (n > 0 && n % 10 == 0)
        {
            sb.Append("\"\n\"");
        }
        sb.Append(input[n]);
    }
    sb.Append('"');

    Console.WriteLine(sb.ToString());
}
0 голосов
/ 17 декабря 2009
string input = "...";

IEnumerable<string> output =
    from i in Enumerable.Range(0, (input.Length + 1) / 10)
    let start = i * 10
    let length = Math.Min(10, input.Length - start)
    select "\"" + input.Substring(start, length) + "\""
0 голосов
/ 17 декабря 2009

Вы можете использовать методы Substring , Substring(int startIndex, int length) и Substring(int startIndex). Я почти не делал C #, но думаю, что это будет выглядеть примерно так:

string originalString = "weygjjsgdgkweygwjiewlewegygciefewjknfkeuwyfjkdygwfsn";
string newString = "";
while (originalString.Length > 10) {
    string line = originalString.Substring(0, 10);
    newString = "\"" + line + "\"\n";
    originalString = originalString.Substring(10);
}
newString = "\"" + originalString + "\"\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...