2013-07-11 56 views
8

Chuỗi có cả hai PadLeftPadRight. 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

+6

'Yourstring.PadLeft(). PadRight()'? –

Trả lời

11

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.

+0

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

-1

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.

+2

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 ... –

1

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.

3

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(); 
    } 
0

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); 
     } 
    } 
} 
-1
/* 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); 
+1

Lực không mạnh đến mức này ;-) – Blaatz0r

0

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); 
     } 
    } 
} 
Các vấn đề liên quan