2010-03-09 25 views
6

Tôi có một chuỗi và tôi muốn thêm một số dấu cách vào đầu chuỗi đó dựa trên biến int.
tôi muốn làm một cái gì đó như thế này:Làm cách nào để tạo chuỗi trong C# theo lập trình?

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

... và bây giờ dòng sẽ có 8 chỗ

cách dễ nhất để làm điều này là gì?

+1

Mặc dù không câu hỏi bạn yêu cầu, chuỗi nối với '+' là rõ ràng hơn, đơn giản hơn và (nếu nó quan trọng) nhanh hơn 'string.Format' cho các trường hợp đơn giản, tức là' chuỗi mới ('', NumberOfTabs) + dòng' –

Trả lời

18

Bạn có thể sử dụng các nhà xây dựng String(char, Int32) như thế này:

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

hoặc một chút hiệu quả hơn:

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

hoặc, một chút ngắn gọn hơn :)

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

Nhận xét đã tạo nên một điểm tốt, tôi f bạn muốn thực sự có ký tự tab, chỉ cần thay đổi ' ' để '\t' và đưa ra các * 4 như thế này:

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

@Danny - Đó là những gì bản gốc đã đăng, có thể là mã thụt đầu dòng? Trong mọi trường hợp, bạn có thể làm ''\ t'' thay vì'' ''và tắt' * 4' nếu muốn các tab đúng. –

+0

Bạn nói đúng, tôi đã xóa nhận xét của mình –

+0

@Danny - Bạn đã đúng, đó chắc chắn là điểm hợp lệ và ai đó có thể bắt gặp sự cố này để thực hiện điều đó sau này. –

6
new string(' ', NumberOfTabs) 
+1

Đi trên OP câu hỏi, có vẻ như nó phải là 'NumberOfTabs * 4' –

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

Không phải là câu trả lời "trơn tru nhất" nhưng nhận được +1 cho sự đơn giản. – Beska

+0

Đó là câu trả lời đúng nhất và đúng, anh ấy đang sử dụng lớp stringbuilder, các chuỗi là không thay đổi. http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx –

+0

@ Joe - yep, các chuỗi không thay đổi, nó là gì? –

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

Bạn có thể sử dụng một cái gì đó như thế này:

String.Empty.PadRight(NumberOfTabs) 
0

Bạn có thể tạo một chuỗi mới chứa số lượng không gian tùy chỉnh. Thật không may, không có phép nhân chuỗi như trong Python (" " * 2). Nhưng bạn có thể nhân số không gian bằng 4 để có được "tab":

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

Trong chuỗi C# là không thay đổi. Bạn thực sự nên sử dụng class stringbuilder.

ví dụ Mã được liệt kê trong liên kết:

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

+0

Tính bất biến không liên quan gì đến câu hỏi ... –

+0

Có, mỗi khi bạn concat một chuỗi bạn tạo một chuỗi không cần thiết mới. Sử dụng stringbuilder ngăn chặn điều này và là cách được khuyến khích để tăng độ dài của chuỗi, mà op đang cố gắng thực hiện. –

+0

Đối với số lượng nhỏ các kết nối, StringBuilder có nhiều chi phí hơn số lần lưu. –

2

Không phải là câu trả lời tốt nhất bằng bất kỳ biện pháp, nhưng đây là một một thú vị, một LINQ chút một liner:

var result = new string(Enumerable.Repeat(' ', count).Concat("my line").ToArray()); 
Các vấn đề liên quan