如果长度大于字符串的长度,则子字符串无法按预期工作
本文关键字:字符串 工作 大于 如果 | 更新日期: 2023-09-27 18:37:14
我知道是否/否则有效,但我需要一个替代方案。
我正在使用
B = String.Concat(A.Substring(0, 40));
以捕获值的前 40 个字符。
如果A
处的值大于 40
,B
能够捕获,但如果 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));