Pad Left& Pad Right(Pad Center)字符串

时间:2013-07-11 10:03:31

标签: c#

字符串同时包含PadLeftPadRight。我需要左右填充(中心对齐)。是否有标准化的方法来实现这一目标,或者更好的是,实现同一目标的内在方式?

8 个答案:

答案 0 :(得分:14)

不是我知道的。如果您发现自己经常使用扩展方法,则可以创建扩展方法。假设您希望您的字符串最终位于中心,请使用以下内容

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

}

要使其成为扩展方法,请执行以下操作:

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

顺便说一句,我只是将我的扩展包含在系统命名空间中 - 这取决于你所做的事情。

答案 1 :(得分:3)

这是一个自定义实现,不需要重建字符串。

它也适用于奇数

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

答案 2 :(得分:1)

你可以自己做这件事:

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

根据需要调整此值以处理奇数填充长度,并使其成为一种扩展方法,如果这样可以让您的生活更轻松。

答案 3 :(得分:1)

这是@ david-colwell的extension方法的略微改进版本,也可以选择使用填充字符:

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

答案 4 :(得分:0)

我认为这有点改进。

import java.util.*;

public class Test1
{
   static Scanner userInput = new Scanner(System.in);

public static void main(String[] args)
{
    Scanner numbers = new Scanner(System.in);

    System.out.println("Please enter a number: ");
    double first = numbers.nextInt();

    System.out.println("Please enter a number: ");
    double second = numbers.nextInt();

    System.out.println("Please enter a number: ");
    double third = numbers.nextInt();

    System.out.println("Please enter a number: ");
    double fourth = numbers.nextInt();

    System.out.println("Please enter a number: ");
    double fifth = numbers.nextInt();

    System.out.println("The average is\t" + ((first + second + third + fourth + fifth)/5)+"\t");
   }
}

答案 5 :(得分:0)

阅读本文后,我想提供另一个有用的功能(在打印方面)。

这不是这个问题的答案,而是以此为基础。

基于@orad 的回答。

public static string PadSplit(string str1, string str2, int totalWidth, char paddingChar = ' ')
{
        string output;
        int paddingWidth = totalWidth - (str1.Length + str2.Length);
        output = string.Format("{0}{1}{2}", str1, string.Empty.PadCenter(paddingWidth, paddingChar), str2);
        return output;
}

PadSplit("David", "Wins", 16) => "David       Wins"

答案 6 :(得分:-1)

您也可以像这样创建扩展程序:

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

并在字符串上使用PadBoth方法。

答案 7 :(得分:-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);