如果长度大于String的长度,则子串不按预期工作

时间:2012-06-14 11:45:46

标签: c# .net regex string

好的,我知道如果/其他有效,我需要另一种选择。

我正在使用

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

捕获值的前40个字符。

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

8 个答案:

答案 0 :(得分:48)

又快又脏:

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

答案 1 :(得分:21)

为什么不为它创建一个扩展...称之为Truncate或Left,或者其他什么。

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

答案 2 :(得分:17)

不理解在String.Concat中只传递单个字符串的目的。您的目的可以通过以下方式解决:

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

答案 3 :(得分:10)

使用下面的代码来子串

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

答案 4 :(得分:9)

扩展最适合像这样的问题;) 我有一些肮脏的名字,但每个人都知道它会做什么 - 这是异常安全的子串:

public static string SubstringNoLongerThanSource(this string source, int startIndex, int maxLength)
{
    return source.Substring(startIndex, Math.Min(source.Length - startIndex, maxLength));
}

答案 5 :(得分:5)

您可以使用Microsoft.VisualBasic.Strings中的Left

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

无论如何,不​​知道为什么要使用Concat

答案 6 :(得分:3)

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

答案 7 :(得分:1)

另一种使用 Take 的方法

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

或扩展方法

public static string Left(this string value, int count)
{
    return new string(value.Take(count).ToArray());
}