2011-09-05 17 views
9

Tôi cố gắng để thêm không gian để kết thúc của một chuỗi trong C#:Padding một chuỗi sử dụng phương pháp PadRight

Trip_Name1.PadRight(20); 

Cũng thử:

Trip_Name1.PadRight(20,' '); 

Không ai trong số này dường như làm việc. Tuy nhiên tôi có thể pad chuỗi với bất kỳ nhân vật khác. Tại sao?

tôi cần phải có được cụ thể hơn, đây là mã đầy đủ:

lnk_showmatch_1.Text = u_trip.Trip_Name1.PadRight(20,' '); 
+1

'Trip_Name1' trong thử nghiệm của bạn là gì? Giá trị trả về của những phương thức đó (nghĩa là gì * "dường như không hoạt động" * có nghĩa là)? Và bạn biết rằng các phương thức này sẽ không sửa đổi giá trị của 'Trip_Name1', đúng không? –

+1

Bạn có thể cung cấp mẫu mã không? Nhân tiện, các chuỗi không thay đổi được và bạn phải gán lại giá trị kết quả sau khi đệm –

+0

Tôi nên cụ thể hơn, đây là mã đầy đủ: lnk_showmatch_1.Text = u_trip.Trip_Name1.PadRight (20, ''); – Bruce

Trả lời

23

String được immutable, họ không thể thay đổi. PadRight trả về một thể hiện mới của chuỗi đệm, không thay đổi thể hiện của chuỗi được gọi. Những gì bạn muốn là thế này:

Trip_Name1 = Trip_Name1.PadRight(20,' '); 

Có một cuộc thảo luận lớn trên this StackOverflow câu hỏi là tại sao dây là không thay đổi.

EDIT:

Không ai trong số này dường như làm việc. Tuy nhiên tôi có thể pad chuỗi với bất kỳ nhân vật khác.

Bạn có thực sự gán lại nó như ví dụ trên không? Nếu đúng như vậy - sau đó mà không cần chi tiết hơn tôi chỉ có thể nghĩ rằng những điều sau đây:

  1. Nếu bạn đang lưu trữ này trong một cơ sở dữ liệu và lấy nó, một số cơ sở dữ liệu với các thiết lập đúng chưa "Trim" cho bạn.
  2. Bạn có logic ở một nơi khác đang cắt tỉa các khoảng trắng. Điều này là phổ biến khi giao dịch với đầu vào của người dùng.

EDIT 2:

tôi cần phải có được cụ thể hơn

tôi sẽ có nhiều phán đoán dựa trên quy ước đặt tên của bạn mà bạn đang đối phó với HTML/ASP.NET. Trong hầu hết các trường hợp, trong HTML - white space is collapsed. Ví dụ:

<div><a>Hello   World</a></div> 
<div><a>Hello World</a></div> 

Cả hai thẻ a sẽ hiển thị giống nhau vì không gian trắng bị thu gọn. Nếu bạn đang thực sự làm việc với HTML - đó có thể là lý do của bạn và tại sao padding hoạt động cho tất cả các nhân vật khác. Nếu bạn thực hiện một nguồn xem của đánh dấu được hiển thị - nó có chứa các khoảng trắng bổ sung không?

Nếu bạn muốn giữ khoảng trắng, hãy thử áp dụng kiểu CSS trên phần tử của bạn được gọi là white-space và đặt thành pre. Ví dụ:

<a style="white-space:pre">hello  world  </a> 

Điều đó sẽ làm cho khoảng trắng được giữ nguyên. Hãy ghi nhớ rằng việc sử dụng không gian màu trắng như thế này có nhược điểm. Trình duyệt không hiển thị chúng giống hệt nhau, v.v. Tôi sẽ không sử dụng điều này cho mục đích bố cục.Hãy xem xét sử dụng CSS và một cái gì đó như min-width thay thế.

+0

@ user554134 - Tôi đã thực hiện thêm một vài chỉnh sửa dựa trên cập nhật của bạn. – vcsjones

+0

Cảm ơn bạn thưa bạn, không gian trắng: trước đã làm các trick! – Bruce

+0

Không hoạt động cho tôi. Cùng một vấn đề var str = INRECField.PadRight (11, '') + INRECDate? .ToString ("MMddyy") + INRECModel.PadRight (12, '') + INRECSerial.PadRight (14, '') + INRECAccessCode .PadRight (5, ''); str = str.PadRight (32, ''); – user2831855

4

Xin lưu ý, cách đó sẽ không hoạt động đối với bất kỳ chức năng thao tác chuỗi nào bởi vì chuỗi là không thay đổi. Họ chỉ trả về một chuỗi mới thay vì cập nhật cá thể hiện có.

PadRight trả về một chuỗi mới mà trái gắn các nhân vật trong chuỗi này bằng cách đệm chúng trên đúng với một quy định Unicode nhân vật, với tổng chiều dài quy định.

string Trip_Name1 = Trip_Name1.PadRight(20,' '); 

EDIT:

kiểm soát của bạn dường như được cắt tỉa các không gian kết thúc. Vì vậy, hãy thử đặt padding cho điều khiển thay vì cho văn bản.

Các vấn đề liên quan