【问题标题】:How to truncate or pad a string to a fixed length in c#如何在c#中将字符串截断或填充到固定长度
【发布时间】:2017-08-23 03:19:39
【问题描述】:

是否有一种将string 设置为固定长度(在C# 中)的单行方式,通过截断填充 em> 带有空格 (' ')。

例如:

string s1 = "abcdef";
string s2 = "abc";

将两者都设置为长度5后,我们应该有:

"abcde"
"abc  "

【问题讨论】:

标签: c# string truncate


【解决方案1】:

我会使用@waka 答案,但作为扩展方法和 null 验证,如下所示:

    public static string FixedLength(this string value, int totalWidth, char paddingChar)
    {
        if (value is null)
            return new string(paddingChar, totalWidth);

        if (value.Length > totalWidth)
            return value.Substring(0, totalWidth);
        else
            return value.PadRight(totalWidth, paddingChar);
    }

【讨论】:

【解决方案2】:

(此答案之前包含错误代码,如 cmets 中所引用。)

一个自定义的单行代码是str.Length > 5 ? str.Substring(0,5) : str.PadRight(5);

【讨论】:

  • 您是否使用更长的字符串测试了自定义单行,需要截断?此外,应为 PadRight 提供所需的总长度,而不是要添加的空格数。
  • @ToolmakerSteve 单行测试 str.Length 并使用 Substring() 截断它; PadRight 中的数字 5 也是 所需的长度。这正是问题中所要求的。我是不是误会了什么?
  • 我看到您在我发表评论后编辑了答案。单线现在看起来是正确的。不幸的是,格式字符串显然是错误的——没有右括号。更重要的是,该字符串格式不会截断更长的字符串 IIRC - 请测试。 (一定是其他人投了反对票。)要么找到一种方法来修复 string.format 以使其截断,要么删除答案的那部分。
  • 看起来您对格式字符串的意思是“{0,-5}”。这将填充一个较短的字符串以使其包含 5 个字符,但不会截断较长的字符串。在String.Format doc 中:“如果对齐的值小于要插入的参数的长度,对齐将被忽略……”我在文档中看不到任何能够截断字符串的格式规范。 (像你一样,":" 后面的数字是无效的,AFAIK。代表格式代码的字母应该在那里。)
  • @ToolmakerSteve 哎呀!我原以为你的评论是新的(答案出现在我的收件箱中),我没有检查日期,对此感到抱歉。我不知道我在想什么 Format() 调用 - 将被删除。
【解决方案3】:

您只需要PadRight 后跟Substring(前提是source 不是null):

string source = ...
int length = 5;

string result = source.PadRight(length).Substring(0, length);

如果source 可以null:

string result = source == null 
  ? new string(' ', length) 
  : source.PadRight(length).Substring(0, length);

【讨论】:

    【解决方案4】:
    private string fixedLength(string input, int length){
        if(input.Length > length)
            return input.Substring(0,length);
        else
            return input.PadRight(length, ' ');
    }
    

    【讨论】:

    • 我希望有一个单线 - 但我怀疑我不得不求助于这个
    • s1.Length > 5 ? s1.Substring(0,5) : s1.PadRight(5) 将不得不这样做
    • @Graham 只是建议您使用三元运算符。但它使代码更难看,imo。
    • @Graham:使它成为一种扩展方法将更适合这种情况
    【解决方案5】:

    你试过了吗 s1.PadLeft(5);

    如果你想要空格以外的东西,你也可以指定填充字符

    s1.PadLeft(6, '.');
    

    会给你:“abcdef。”

    两者都做:

    var s1 = "1234567890";
    var s2 = s1.SubString(5).PadLeft(5);
    

    【讨论】:

    • 抱歉,s1.SubString(5).PadLeft(5);67890;和 exception 如果s1 = "123"
    猜你喜欢
    • 2023-03-15
    • 2013-12-17
    • 2016-01-31
    • 2015-11-13
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多