C # добавление символа в строку - PullRequest
10 голосов
/ 07 октября 2010

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

из этой строки.alpha = abcde-fghij-klmno-pqrst-uvwxy-z

Ответы [ 7 ]

19 голосов
/ 07 октября 2010

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

Строки IEnumerable, поэтому вы должны иметь возможность запустить цикл for над ним

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string alpha = "abcdefghijklmnopqrstuvwxyz";
            var builder = new StringBuilder();
            int count = 0;
            foreach (var c in alpha)
            {
                builder.Append(c);
                if ((++count % 5) == 0)
                {
                    builder.Append('-');
                }
            }
            Console.WriteLine("Before: {0}", alpha);
            alpha = builder.ToString();
            Console.WriteLine("After: {0}", alpha);
        }
    }
}

Производит это:

Before: abcdefghijklmnopqrstuvwxyz
After: abcde-fghij-klmno-pqrst-uvwxy-z
11 голосов
/ 07 октября 2010

Вот мое решение, не переусердствовав.

    private static string AppendAtPosition(string baseString, int position, string character)
    {
        var sb = new StringBuilder(baseString);
        for (int i = position; i < sb.Length; i += (position + character.Length))
            sb.Insert(i, character);
        return sb.ToString();
    }


    Console.WriteLine(AppendAtPosition("abcdefghijklmnopqrstuvwxyz", 5, "-"));
8 голосов
/ 11 декабря 2015

Мне пришлось сделать нечто подобное, пытаясь преобразовать строку чисел в промежуток времени, добавив : и .. В основном я взял 235959999 и мне нужно было конвертировать его в 23: 59: 59,999. Для меня это было легко, потому что я знал, куда мне нужно «вставить» указанные символы.

ts = ts.Insert(6,".");
ts = ts.Insert(4,":");
ts = ts.Insert(2,":");

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

Вы можете попробовать нечто подобное, выполнив:

alpha = alpha.Insert(5,"-");
alpha = alpha.Insert(11,"-"); //add 1 to account for 1 -
alpha = alpha.Insert(17,"-"); //add 2 to account for 2 -
...
4 голосов
/ 07 октября 2010
string alpha = "abcdefghijklmnopqrstuvwxyz";
string newAlpha = "";
for (int i = 5; i < alpha.Length; i += 6)
{
  newAlpha = alpha.Insert(i, "-");
  alpha = newAlpha;
}
1 голос
/ 10 мая 2012

Вставка пробела в поле emailId после каждых 8 символов

public string BreakEmailId(string emailId) {
    string returnVal = string.Empty;
    if (emailId.Length > 8) {           
        for (int i = 0; i < emailId.Length; i += 8) {
            returnVal += emailId.Substring(i, 8) + " ";
        }
    }

    return returnVal;
}
0 голосов
/ 07 октября 2010

Вы можете определить этот метод расширения:

public static class StringExtenstions
    {
        public static string InsertCharAtDividedPosition(this string str, int count, string character)
        {
            var i = 0;
            while (++i * count + (i - 1) < str.Length)
            {
                str = str.Insert((i * count + (i - 1)), character);
            }
            return str;
        }
    }

И использовать его следующим образом:

var str = "abcdefghijklmnopqrstuvwxyz";
str = str.InsertCharAtDividedPosition(5, "-");
0 голосов
/ 07 октября 2010
string[] lines = Regex.Split(value, ".{5}");  
string out = "";
foreach (string line in lines)  
{  
    out += "-" + line;
}
out = out.Substring(1);
...