2010-03-09 4 views
6

J'ai une chaîne, et je veux ajouter un nombre d'espaces au début de cette chaîne basée sur une variable int.
Je veux faire quelque chose comme ceci:Comment créer une chaîne en C# par programme?

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

... et maintenant la ligne aurait 8 places

Quelle est la meilleure façon de le faire?

+1

Bien que non la question que vous avez posée, la concaténation des chaînes avec '+' est plus claire, plus simple et (si c'est important) plus rapide que 'string.Format' pour les cas simples, ie' new string ('', NumberOfTabs) + line' –

Répondre

18

Vous pouvez utiliser le constructeur String(char, Int32) comme ceci:

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

ou un peu plus efficace:

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

ou, un peu plus concise :)

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

Un commentaire fait un bon point, je f vous voulez avoir fait le caractère de tabulation, il suffit de changer le ' ' à '\t' et prendre le * 4 comme ceci:

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

@Danny - C'est ce que l'original a posté, peut-être l'indentation de code? Dans tous les cas, vous pouvez faire "\ t" au lieu de "" et enlever le '* 4' si vous voulez de vrais onglets. –

+0

Vous avez raison, j'ai enlevé mon commentaire –

+0

@Danny - Vous aviez raison, c'est certainement un point valable et quelqu'un peut rencontrer cela en essayant de le faire plus tard. –

6
new string(' ', NumberOfTabs) 
+1

question, il semble que ce devrait être 'NumberOfTabs * 4' –

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

Pas la réponse "la plus lisse", mais obtient un +1 pour la simplicité. – Beska

+0

C'est la réponse la plus lisse et la plus correcte, il utilise la classe stringbuilder, les chaînes sont immuables. http://msdn.microsoft.com/fr-fr/library/system.text.stringbuilder.aspx –

+0

@Joe - oui, les chaînes sont immuables, qu'en est-il? –

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

Vous pouvez utiliser quelque chose comme ceci:

String.Empty.PadRight(NumberOfTabs) 
0

Vous pouvez créer une nouvelle chaîne contenant un nombre d'espaces personnalisé. Malheureusement, il n'y a pas de multiplication de chaînes comme en Python (" " * 2). Mais vous pouvez multiplier le nombre de places par 4 pour obtenir « onglets »:

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

Dans les chaînes C# sont immuables. Vous devriez vraiment utiliser la classe stringbuilder.

exemples de code sont répertoriés dans le lien:

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

+0

L'immutabilité n'a rien à voir avec la question ... –

+0

Oui, à chaque fois que vous concattez une chaîne, vous créez une nouvelle chaîne non-nécessaire. L'utilisation de stringbuilder empêche cela et est la manière recommandée d'augmenter la longueur de la chaîne, que l'op essaie d'effectuer. –

+0

Pour un petit nombre de concaténations, StringBuilder a plus de frais généraux qu'il n'en économise. –

2

Pas la meilleure réponse par toute mesure, mais voici une une amusante, un peu LINQ one-liner:

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