Добавьте один пробел после каждых двух символов и добавьте символ перед каждым отдельным символом - PullRequest
3 голосов
/ 07 июля 2011

Я хочу добавить один пробел после каждых двух символов и добавить символ перед каждым отдельным символом.

Это мой код:

string str2;
str2 = str1.ToCharArray().Aggregate("", (result, c) => result += ((!string.IsNullOrEmpty(result) && (result.Length + 1) % 3 == 0) ? " " : "") + c.ToString());

У меня нет проблем с разделением каждых двух символов одним пробелом, но как узнать, есть ли в отдельной строке отдельный символ, и добавить символ перед этим символом?

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

У меня есть эта строка:

0123457

После разделения каждых двух символов пробелом я получу:

01 23 45 7

Я хочу добавить 6 перед цифрой 7.

Примечание: числа зависят от ввода пользователя, поэтому они не всегда одинаковы.

Спасибо.

Ответы [ 4 ]

20 голосов
/ 13 апреля 2012
[TestMethod]
public void StackOverflowQuestion()
{
    var input = "0123457";
    var temp = Regex.Replace(input, @"(.{2})", "$1 ");
    Assert.AreEqual("01 23 45 7", temp);
}
4 голосов
/ 07 июля 2011

Попробуйте что-то вроде этого:

static string ProcessString(string input)
{
    StringBuilder buffer = new StringBuilder(input.Length*3/2);
    for (int i=0; i<input.Length; i++)
    {
        if ((i>0) & (i%2==0))
            buffer.Append(" ");
        buffer.Append(input[i]);
    }
    return buffer.ToString();
}

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

2 голосов
/ 07 июля 2011

Может быть, вы можете попробовать, если я правильно понимаю ваш запрос,

String.Length % 2

Если результат равен 0, вы сделали первую итерацию, если нет, просто добавьте символ перед последней.

1 голос
/ 07 июля 2011

Я думаю, это то, что вы просили

string str1 = "3322356";
            string str2;

            str2 = String.Join(" ", 
                str1.ToCharArray().Aggregate("",
                (result, c) => result += ((!string.IsNullOrEmpty(result) &&
                    (result.Length + 1) % 3 == 0) ? " " : "") + c.ToString())
                    .Split(' ').ToList().Select(
                x => x.Length == 1 
                    ? String.Format("{0}{1}", Int32.Parse(x) - 1, x) 
                    : x).ToArray());

результат "33 22 35 56"

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