如果长度大于字符串的长度,则子字符串无法按预期工作

本文关键字:字符串 工作 大于 如果 | 更新日期: 2023-09-27 18:37:14

我知道是否/否则有效,但我需要一个替代方案。

我正在使用

B = String.Concat(A.Substring(0, 40));

以捕获值的前 40 个字符。

如果A处的值大于 40B 能够捕获,但如果 A 的值小于 40,则在 B 处没有捕获的值。

如果长度大于字符串的长度,则子字符串无法按预期工作

快速的一行是:

  B = A?.Length > 40 ? A.Substring(0, 40) : A;

它仅在长度超过 40 时实现子字符串。为了冗余,40 当然最好是一个变量。使用"?."可防止在"A"为空时出错。正如ean5533提到的A.Substring(0, Math.Min(40, A.Length))也可以使用。相同的结果,防止两次使用"40",但将始终调用子字符串函数(这在当今时代并不重要)

为了便于使用,可以创建扩展方法

public static string Truncate(this string value, int MaxLength) => value?.Length > MaxLength? value.Substring(0, MaxLength) : value;

为它创建一个扩展...称它为截断或左,或其他什么。

public static class MyExtensions
{
    public static string Truncate(this string s, int length)
    {
        if(s.Length > length) 
            return s.Substring(0, length);
        return s;
    }
}

然后你可以简单地这样称呼它:

string B = A.Truncate(40);

另请注意,您不必将其设置为扩展方法,尽管它会更干净。

在 StringTool 类中:

public static string Truncate(string value, int length)
{
    if(value.Length > length) 
        return value.Substring(0, length);
    return value;
}

并称之为:

string B = StringTool.Truncate(A, 40);

使用以下代码作为子字符串

B = String.padright(40).Substring(0, 40))

String.Concat 在这里不能满足您的目的。您应该执行以下操作:

if(A.Length > 40)
    B = A.Substring(0, 40);
else
    B = A;
扩展

最适合像这样的问题;)

我的有一些肮脏的名字,但每个人都知道它会做什么 - 这是一个异常安全的子字符串:

public static string SubstringNoLongerThanSource(this string source, int startIndex, int maxLength)
{
    return source.Substring(startIndex, Math.Min(source.Length - startIndex, maxLength));
}
B = string.Concat(A.Substring(0, Math.Min(40, A.Length)));
另一种

使用Take

B = new string(A.Take(40).ToArray())

或扩展方法

public static string Left(this string value, int count)
{
    return new string(value.Take(count).ToArray());
}
您可以使用

Left from Microsoft.VisualBasic.Strings .

B = Microsoft.VisualBasic.Strings.Left(A, 40);

我不知道你为什么要使用Concat,反正。

只需使用

var B = A.Substring(0, Math.Min(A.Length, 40));