如何在固定长度字符串中对齐字符串

本文关键字:字符串 对齐 | 更新日期: 2023-09-27 18:15:10

我有一个长度= 100的字符串;

我需要将文本"Hello"居中,在该字符串中使用空白。

我该怎么办?

谢谢。

如何在固定长度字符串中对齐字符串

您可以使用字符串填充方法和一个小匹配来计算中心位置:

var stringToCenter = "hello";
var totalLength = 100;
var centeredString = 
     stringToCenter.PadLeft(((totalLength - stringToCenter.Length) / 2) 
                            + stringToCenter.Length)
                   .PadRight(totalLength);

您可以将此逻辑移动到扩展方法中:

public static class StringExtensions{
    public static string CenterString(this string stringToCenter, int totalLength)
    {
        return stringToCenter.PadLeft(((totalLength - stringToCenter.Length) / 2) 
                            + stringToCenter.Length)
                   .PadRight(totalLength);
    }
}

你可以用

var centeredString = "hello".CenterString(100);

演示.NETFiddle。

我本来想把这个作为评论添加到@nemesv的回答中,但是我在Stack Overflow上缺乏声誉阻止了它。

答案中的代码导致右侧比左侧添加更多的填充。例如,在该答案的代码中,hello中的"h"出现在第43个位置,而不是第48个位置。

修改后的代码平衡了填充。

var stringToCenter = "hello";
var stringToCenterLength = stringToCenter.Length;
var totalLength = 100;
var centeredString = stringToCenter.PadLeft(((totalLength - stringToCenterLength) / 2) + stringToCenterLength).PadRight(totalLength);

您可以计算字符串长度,然后应用适当的填充:

"".PadLeft()"".PadRight()

我已经扩展了@nemesv的答案,以包含一个接受填充字符的过载,因此您可以得到如下内容:

################################# Hello World! #################################

代码:

using System;
public class Program
{
   public void Main()
   {
      Console.WriteLine(" Hello World! ".CenterString(80, '#'));
   }
}
public static class StringExtensions
{
   public static string CenterString(this string stringToCenter, int totalLength)
   {
      return stringToCenter.PadLeft(
          ((totalLength - stringToCenter.Length) / 2) 
            + stringToCenter.Length).PadRight(totalLength);
   }
   public static string CenterString(this string stringToCenter, 
                                          int totalLength, 
                                          char paddingCharacter)
   {
      return stringToCenter.PadLeft(
          ((totalLength - stringToCenter.Length) / 2) + stringToCenter.Length,
            paddingCharacter).PadRight(totalLength, paddingCharacter);
   }
}

例子:.NETFiddle