2010-03-09 22 views
6

Tengo una cadena, y quiero agregar un número de espacios al comienzo de esa cadena en función de una variable int.
yo a querer hacer algo como esto:¿Cómo puedo crear una cadena en C# mediante programación?

int NumberOfTabs = 2; 
string line = "my line"; 
string line = String.Format("{0}{1}", " " * NumberOfTabs, line); 

... y ahora la línea tendría 8 espacios

¿Cuál es la manera más fácil de hacer esto?

+1

Aunque no se la pregunta que hizo, la concatenación de cadenas con '+' es más clara, más simple y (si es que importa) más rápida que 'string.Format' para casos simples, es decir' nueva cadena ('', NumberOfTabs) + línea' –

Respuesta

18

Usted puede utilizar el constructor String(char, Int32) así:

string line = String.Format("{0}{1}", new String(' ', NumberofTabs * 4), line); 

o un poco más eficiente:

string line = String.Concat(new String(' ', NumberofTabs * 4), line); 

o, un poco más concisa :)

string line = new String(' ', NumberofTabs * 4).Concat(line); 

Un comentario hizo un buen punto, yo f usted quiere tener realmente el carácter de tabulación, sólo cambia el ' ' a '\t' y sacar la * 4 así:

string line = String.Concat(new String('\t', NumberofTabs), line); 
+0

@Danny - ¿Eso es lo que publicó el original, tal vez la sangría del código? En cualquier caso, puede hacer ''\ t'' en lugar de'' ''y quitar el' * 4' si quiere pestañas verdaderas. –

+0

Tienes razón, eliminé mi comentario –

+0

@Danny - Tenías razón, definitivamente es un punto válido y alguien puede encontrar esto tratando de hacer eso más adelante. –

6
new string(' ', NumberOfTabs) 
+1

Continuando con los OP's pregunta, parece que debería ser 'NumberOfTabs * 4' –

8
int i=8; 
System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
sb.Append(" ", i); 
+1

No es la respuesta "más hábil", pero obtiene un +1 de franqueza. – Beska

+0

Es la respuesta más hábil y correcta, está usando la clase de constructor de cadenas, las cadenas son inmutables. http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx –

+0

@Joe - sí, las cadenas son inmutables, ¿qué pasa? –

4
str = str.PadLeft(str.Length+tabs*4); 
2

usted podría utilizar algo como esto:

String.Empty.PadRight(NumberOfTabs) 
0

Puede crear una nueva cadena que contenga un número personalizado de espacios. Desafortunadamente, no hay multiplicación de cadenas como en Python (" " * 2). Sin embargo, se puede multiplicar el número de plazas por 4 para obtener "lengüetas":

int numberOfTabs = 2; 
string line = "my line"; 
string whitespaces = new string(' ', numberOfTabs * 4); 
string s = whitespaces + line; 
2
int NumberOfTabs = 2; 
string line = "my line"; 
string results = line.PadLeft(line.Length + NumberOfTabs, ' '); 
3

En # cadenas de C son inmutables. Realmente deberías usar la clase de generador de cadenas.

Ejemplos de código se enumeran en el enlace:

http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx

+0

La inmutabilidad no tiene nada que ver con la pregunta ... –

+0

Sí, lo hace, cada vez que concatena una cadena, crea una nueva cadena innecesaria. El uso de stringbuilder evita esto y es la forma recomendada de aumentar la longitud de la cadena, que el operador está intentando realizar. –

+0

Para un pequeño número de concatenaciones, StringBuilder tiene más sobrecarga de la que guarda. –

2
No

la mejor respuesta por cualquier medida, pero aquí hay uno divertido, un LINQ pequeña de una sola línea:

var result = new string(Enumerable.Repeat(' ', count).Concat("my line").ToArray()); 
Cuestiones relacionadas