2010-10-07 26 views
6

Sé que puedo añadir a una cadena, pero yo quiero ser capaz de añadir un carácter específico después de cada 5 caracteres dentro de la cadenaC# añadiendo un carácter en una cadena

de esta cadena alfa = ABCDEFGHIJKLMNOPQRSTUVWXYZ

a este cadena alfa = abcde-fghij-klmno-pqrst-uvwxy-z

+1

No se puede anexar a una cadena, y no se puede agregar un carácter específico a una cadena. Las cadenas no se pueden modificar. * Puedes * crear una nueva cadena basada en una cadena existente. Parece una diferencia sutil, pero puede ser importante. –

+1

relacionado con http://stackoverflow.com/questions/3306568/how-do-i-set-a-character-at-an-index-in-a-string-in-c/ –

Respuesta

15

Recuerde que una cadena es inmutable, por lo que deberá crear una nueva cadena.

Las cadenas son IEnumerable por lo que debe ser capaz de ejecutar un bucle sobre ella

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); 
     } 
    } 
} 

Produce esto:

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

Puede usar 'Regex. Reemplace', o 'String.Join', y ¿por qué está usando' \ d'? – Kobi

+0

Muchas asignaciones, no tan efectivas. –

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

Es posible definir este método de extensión:

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; 
     } 
    } 

Y usarlo como:

var str = "abcdefghijklmnopqrstuvwxyz"; 
str = str.InsertCharAtDividedPosition(5, "-"); 
10

Aquí está mi solución, sin exagerar.

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

¿Por qué no utiliza la función String.Insert()? –

+1

+1, solución simple y genérica. –

+0

@Thibault: He cambiado a la cadena.Insertar ahora. Supongo que soy demasiado lista ... :) – danijels

1

Inserción de espacio en el campo EMAILID después de cada 8 caracteres

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

que tenía que hacer algo similar, tratando de convertir una cadena de números en un intervalo de tiempo mediante la adición de : y .. Básicamente tomaba 235959999 y necesitaba convertirlo a 23: 59: 59.999. Para mí fue fácil porque sabía dónde necesitaba "insertar" dichos personajes.

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

reasignando básicamente ts a sí mismo con el carácter insertado. Trabajé en mi camino de atrás hacia adelante, porque era flojo y no quería hacer operaciones matemáticas adicionales para los otros personajes insertados.

Usted podría intentar algo similar haciendo:

alpha = alpha.Insert(5,"-"); 
alpha = alpha.Insert(11,"-"); //add 1 to account for 1 - 
alpha = alpha.Insert(17,"-"); //add 2 to account for 2 - 
... 
Cuestiones relacionadas