Chuỗi có cả hai PadLeft
và PadRight
. Tôi cần padding cả trái và phải (trung tâm biện minh). Có cách nào tiêu chuẩn hóa để làm điều này, hay tốt hơn, được xây dựng theo cách để đạt được cùng một mục tiêu?Pad Trái & Pad phải (Pad Center) Chuỗi
Trả lời
Không phải là tôi biết. Bạn có thể tạo một phương thức mở rộng nếu bạn thấy mình sử dụng nó rất nhiều. Giả sử bạn muốn chuỗi của bạn để kết thúc trong trung tâm, sử dụng giống như sau
public string PadBoth(string source, int length)
{
int spaces = length - source.Length;
int padLeft = spaces/2 + source.Length;
return source.PadLeft(padLeft).PadRight(length);
}
Để thực hiện phương pháp này một phần mở rộng, làm điều đó như vậy:
namespace System
{
public static class StringExtensions
{
public static string PadBoth(this string str, int length)
{
int spaces = length - str.Length;
int padLeft = spaces/2 + str.Length;
return str.PadLeft(padLeft).PadRight(length);
}
}
}
Là một sang một bên, tôi chỉ bao gồm các phần mở rộng của tôi trong không gian tên hệ thống - tùy thuộc vào bạn những gì bạn làm.
Sửa đổi dòng cuối cùng để sử dụng không phá vỡ không gian (alt + 0160), '.PadRight (length, '');' . Điều này giúp giữ cho padding hiển thị ngay cả khi môi trường hiển thị không thích nhiều không gian. – ShawnFeatherly
bạn cũng có thể tạo ra phần mở rộng của bạn như thế này:
public static string PadBoth(this string s, int padValue)
{
return s.PadLeft(padValue).PadRight(padValue);
}
và sử dụng phương pháp PadBoth trên chuỗi.
Hãy thử chạy này, tôi có một cảm giác nó sẽ làm điều tương tự như pad trái một mình ... –
Bạn có thể làm điều đó cho mình với điều này:
string test = "Wibble";
int padTo = 12;
int padSize = (padTo - test.Length)/2;
if (padSize > 0) {
test = test.Trim().PadLeft(test.Length + padSize).PadRight(test.Length + 2 * padSize);
}
Chỉ cần điều chỉnh này để đối phó với chiều dài đệm lẻ theo yêu cầu và làm cho nó trở thành một phương pháp mở rộng nếu mà làm cho cuộc sống của bạn dễ dàng hơn.
Dưới đây là triển khai tùy chỉnh, không yêu cầu xây dựng lại chuỗi.
Ngoài ra nó hoạt động một cách chính xác với số lẻ
static string PadCenter(string text, int newWidth)
{
const char filler = ' ';
int length = text.Length;
int charactersToPad = newWidth - length;
if (charactersToPad < 0) throw new ArgumentException("New width must be greater than string length.", "newWidth");
int padLeft = charactersToPad/2 + charactersToPad%2;
//add a space to the left if the string is an odd number
int padRight = charactersToPad/2;
StringBuilder resultBuilder = new StringBuilder(newWidth);
for (int i = 0; i < padLeft; i++) resultBuilder.Insert(i, filler);
for (int i = 0; i < length; i++) resultBuilder.Insert(i + padLeft, text[i]);
for (int i = newWidth - padRight; i < newWidth; i++) resultBuilder.Insert(i, filler);
return resultBuilder.ToString();
}
Dưới đây là một phiên bản cải tiến nhẹ của phương pháp @ david-Colwell của extension mà cũng tùy mất một nhân vật padding:
namespace System
{
public static class StringExtensions
{
public static string PadSides(this string str, int totalWidth, char paddingChar = ' ')
{
int padding = totalWidth - str.Length;
int padLeft = padding/2 + str.Length;
return str.PadLeft(padLeft, paddingChar).PadRight(totalWidth, paddingChar);
}
}
}
/* Output looks like this
*****Luke*****
*****Leia*****
*****Han******
**Chewbecca*** */
string result = "";
string names = "Luke,Leia,Han,Chewbecca";
string[] charA = names.Split(',');
for (int i = 0; i < charA.Length; i++)
{
int padLeft = (14 - charA[i].Length)/2;
string temp = charA[i].PadLeft(charA[i].Length + padLeft, '*');
result += temp.PadRight(14, '*') + "\n";
}
Console.WriteLine(result);
Lực không mạnh đến mức này ;-) – Blaatz0r
Dưới đây là một một chút cải tiến tôi nghĩ.
namespace System
{
public static class StringExtensions
{
public static string PadCenter(this string str, int totalLength, char padChar = '\u00A0')
{
int padAmount = totalLength - str.Length;
if (padAmount <= 1)
{
if (padAmount == 1)
{
return str.PadRight(totalLength);
}
return str;
}
int padLeft = padAmount/2 + str.Length;
return str.PadLeft(padLeft).PadRight(totalLength);
}
}
}
- 1. số căn phải/số pad trong bash
- 2. Làm thế nào để pad NSString với không gian?
- 3. Làm thế nào để nối hai chuỗi trong sql và pad một chuỗi với 0?
- 4. Pad với số không dẫn đến độ rộng phổ biến
- 5. khối pad bị hỏng trong quá trình giải mã (Android)
- 6. (n) curses pad trong python không hoạt động
- 7. Xcode Số pad với lỗi số thập phân
- 8. Làm thế nào để pad tất cả các số trong một chuỗi
- 9. Làm thế nào để pad một chuỗi nhị phân với số không?
- 10. Android: Có cách nào để mô phỏng Sự kiện D-Pad (API 10) không?
- 11. Làm thế nào để pad đầu ra điểm nổi Fortran với số không đứng đầu?
- 12. MySQL - làm thế nào để mã zip trước pad với "0"?
- 13. Làm thế nào để không số pad trong tên tập tin trong Bash?
- 14. Làm thế nào để zero-pad biến số trong zsh (? Và có lẽ cũng bash)
- 15. Tại sao printf pad một đĩa 8 bit đến 32 bit?
- 16. Làm thế nào để "pad" một chuỗi chiều dài thay đổi để có một cột cuối cùng thẳng hàng
- 17. Đệm trái/phải cho Button.setCompoundDrawablesWithIntrinsicBounds()?
- 18. Trong C# làm thế nào để sử dụng String.Format cho một số và pad trái với số không vì thế nó luôn 6 chars
- 19. Ngoại lệ Weblogic Triển khai Ngoại lệ: PaddingException: Không thể thực hiện unpadding: byte pad không hợp lệ
- 20. Làm thế nào để không pad một chuỗi các số nguyên trong bash để tất cả đều có cùng chiều rộng?
- 21. Cách sử dụng chuyển hướng điều hướng D-pad giữa hàng của listview và số người quyết định (hỗ trợ Google-TV)
- 22. Chuỗi đệm trong C
- 23. Python - Làm thế nào tôi có thể đệm một chuỗi có dấu cách từ phải sang trái?
- 24. Button và drawable trái
- 25. Chuỗi đệm trong chuỗi C++
- 26. hướng trục d3: center
- 27. chuỗi :: size_type thay vì int
- 28. Làm thế nào để phát nổ chuỗi phải sang trái?
- 29. HTML5 Canvas fillText với chuỗi từ phải sang trái
- 30. Chuỗi từ phải sang trái thay thế bằng Python?
'Yourstring.PadLeft(). PadRight()'? –