2014-04-05 22 views
5

Tôi cần thụt lề nhiều dòng văn bản (trái ngược với this question for a single line of text).Thụt lề nhiều dòng văn bản

Hãy nói rằng đây là văn bản đầu vào của tôi:

First line 
     Second line 
    Last line 

Thông báo sự thụt vào trong mỗi dòng:

First line 
    Second line 
Last line 

kết quả này Những gì tôi cần là.

Đây là những gì tôi có cho đến nay:

var textToIndent = @"First line 
    Second line 
Last line."; 
var splittedText = textToIndent.Split(new string[] {Environment.NewLine}, StringSplitOptions.None); 
var indentAmount = 4; 
var indent = new string(' ', indentAmount); 
var sb = new StringBuilder(); 
foreach (var line in splittedText) { 
    sb.Append(indent); 
    sb.AppendLine(line); 
} 
var result = sb.ToString(); 

Có/cách an toàn hơn đơn giản để làm điều đó?

Mối quan tâm của tôi nằm trong phương pháp tách, có thể khó nếu văn bản từ Linux, Mac hoặc Windows được chuyển và các dòng mới có thể không được chia nhỏ chính xác trong máy đích.

Trả lời

10

Vì bạn đang thụt tất cả các dòng, làm thế nào về làm một cái gì đó như:

var result = indent + textToIndent.Replace("\n", "\n" + indent); 

nào nên bao gồm cả Windows \ r \ n và Unix \ n kết thúc của dòng.

+3

+1. Chỉ để hoàn chỉnh, một số hệ thống tối nghĩa/cũ sử dụng các kết hợp "dòng mới" khác: [Đại diện dòng mới] (http://en.wikipedia.org/wiki/Newline#Representations). – Sphinxxx

+3

Vui lòng sử dụng 'Environment.NewLine' thay vì' "\ n" '... – aloisdg

+4

Điều này thật tuyệt vời, cảm ơn bạn! Và tôi không chắc chắn về "\ n", nhưng nghĩ rằng trên thực tế, "\ n" có thể tốt hơn nếu bạn chỉ phải đối phó với Windows và Unix, vì điều này sẽ phân tích các chuỗi được gửi bởi hệ thống khác. Nếu không thì các môi trường Windows sẽ không thay thế các dòng mới của Unix. Nhưng nếu bạn cần hỗ trợ Mac OS 9 (hoặc những người khác) Environment.NewLine sẽ làm việc tốt hơn tôi nghĩ. –

4

Chỉ cần thay thế xuống dòng của bạn với newline + thụt lề:

var indentAmount = 4; 
var indent = new string(' ', indentAmount); 
textToIndent = indent + textToIndent.Replace(Environment.NewLine, Environment.NewLine + indent); 
Các vấn đề liên quan