2010-10-07 2 views
6

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

из этого строки альфа = АБВГДЕЖЗИКЛМНОПРСТУФХЧШЭЮЯ

string alpha = abcde-fghij-klmno-pqrst-uvwxy-z

+1

Вы не можете добавить в строку, и вы не можете добавить определенный символ в строке. Строки не могут быть изменены. Вы * можете * создать новую строку на основе существующей строки. Кажется, это тонкая разница, но это может быть важно. –

+1

относящийся к http://stackoverflow.com/questions/3306568/how-do-i-set-a-character-at-an-index-in-a-string-in-c/ –

ответ

15

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

Строки IEnumerable, так что вы должны быть в состоянии запустить цикл над ним

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 
0
string[] lines = Regex.Split(value, ".{5}"); 
string out = ""; 
foreach (string line in lines) 
{ 
    out += "-" + line; 
} 
out = out.Substring(1); 
+0

Вы можете использовать 'Regex. Заменить ', или' String.Join', и почему вы используете '\ d'? – Kobi

+0

Множество распределений, не столь эффективных. –

3
string alpha = "abcdefghijklmnopqrstuvwxyz"; 
string newAlpha = ""; 
for (int i = 5; i < alpha.Length; i += 6) 
{ 
    newAlpha = alpha.Insert(i, "-"); 
    alpha = newAlpha; 
} 
0

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

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, "-"); 
10

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

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, "-")); 
+2

Почему вы не используете функцию String.Insert()? –

+1

+1, простое и универсальное решение. –

+0

@Thibault: Я изменил на string.Insert сейчас. Я думаю, что я слишком много из списка ... :) – danijels

1

Вставка Пространство в 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; 
} 
2

я должен был сделать что-то подобное, пытаясь преобразовать строку чисел в отрезок времени, добавляя в : и .. В основном я принимал 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 - 
... 
Смежные вопросы