2013-07-11 14 views
8

Der String hat sowohl PadLeft als auch PadRight. Ich brauche links und rechts aufzufüllen (Mittenausrichtung). Gibt es einen standardisierten Weg dies zu tun, oder besser noch, ein eingebautes Mittel, um das gleiche Ziel zu erreichen?Pad links und Pad rechts (Pad Center) String

+6

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

Antwort

11

Nicht, dass ich weiß. Sie können eine Erweiterungsmethode erstellen, wenn Sie sich selbst häufig verwenden. Angenommen, Sie möchten, dass Ihre Schnur in der Mitte, am Ende, verwenden Sie so etwas wie die folgenden

public string PadBoth(string source, int length) 
{ 
    int spaces = length - source.Length; 
    int padLeft = spaces/2 + source.Length; 
    return source.PadLeft(padLeft).PadRight(length); 

} 

Um dieses eine Erweiterungsmethode zu machen, tun Sie es wie folgt:

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

Als beiseite, ich nur schließen meine Erweiterungen im Systemnamespace - es liegt an Ihnen, was Sie tun.

+0

Modifizierte die letzte Zeile, um nicht-brechende Leerzeichen zu verwenden (alt + 0160), '.PadRight (Länge, '');' . Dies hilft, das Padding auch dann zu zeigen, wenn die Anzeigeumgebung mehrere Leerzeichen nicht mag. – ShawnFeatherly

-1

Sie können auch Ihre Erweiterung wie folgt erstellen:

public static string PadBoth(this string s, int padValue) 
{ 
    return s.PadLeft(padValue).PadRight(padValue); 
} 

und PadBoth Methode auf Zeichenfolge verwenden.

+2

Versuchen Sie, dies auszuführen, ich habe das Gefühl, es wird das gleiche tun wie Pad in Ruhe gelassen ... –

1

Sie könnten es tun, um sich mit diesem:

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

Nur soviel justieren mit ungeraden Polsterung Längen befassen, wie erforderlich und es eine Erweiterungsmethode machen, wenn das Ihr Leben einfacher macht.

3

Hier ist eine benutzerdefinierte Implementierung, die keine Neubildung von Zeichenfolgen erfordert.

Auch funktioniert es einwandfrei mit ungeraden Zahlen

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

Hier ist eine leicht verbesserte Version von @ david-Colwell der extension Methode, die gegebenenfalls auch ein Füllzeichen nimmt:

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

Die Kraft ist in diesem nicht so stark ;-) – Blaatz0r

0

hier ein etwas von einer Verbesserung, denke ich.

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