Ric*_*d77 177 .net c# string character
我想为类编写一个扩展方法,String
这样如果输入字符串的长度超过提供的长度N
,则只显示第一个N
字符.
这是它的样子:
public static string TruncateLongString(this string str, int maxLength)
{
if (str.Length <= maxLength)
return str;
else
//return the first maxLength characters
}
Run Code Online (Sandbox Code Playgroud)
我String.*()
可以用什么方法来获取第一个N
字符str
?
Pau*_*ane 354
public static string TruncateLongString(this string str, int maxLength)
{
if (string.IsNullOrEmpty(str))
return str;
return str.Substring(0, Math.Min(str.Length, maxLength));
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*eer 61
string truncatedToNLength = new string(s.Take(n).ToArray());
Run Code Online (Sandbox Code Playgroud)
这个解决方案有一个很小的好处,如果n大于s.Length,它仍然是正确的.
the*_*onk 31
您可以使用LINQ,str.Take(n)
或者str.SubString(0, n)
后者将抛出ArgumentOutOfRangeException
异常n > str.Length
.
请注意LINQ版本返回一个IEnumerable<char>
,所以你必须转换IEnumerable<char>
为string
:new string(s.Take(n).ToArray())
.
Maj*_*jid 13
只是:
public static String Truncate(String input,int maxLength)
{
if(input.Length > maxLength)
return input.Substring(0,maxLength);
return input;
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*cht 13
每当我必须在C#中进行字符串操作时,我都会错过Visual Basic中的旧函数Left
和Right
函数,这些函数比使用它更简单Substring
.
所以在我的大多数C#项目中,我为它们创建了扩展方法:
public static class StringExtensions
{
public static string Left(this string str, int length)
{
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(this string str, int length)
{
return str.Substring(str.Length - Math.Min(length, str.Length));
}
}
Run Code Online (Sandbox Code Playgroud)
注:
该Math.Min
部分是有原因Substring
引发ArgumentOutOfRangeException
,当输入字符串的长度比要求的长度短,如以前的答案在一些评论已经提到.
string longString = "Long String";
// returns "Long";
string left1 = longString.Left(4);
// returns "Long String";
string left2 = longString.Left(100);
Run Code Online (Sandbox Code Playgroud)
public static string TruncateLongString(this string str, int maxLength)
{
return str.Length <= maxLength ? str : str.Remove(maxLength);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果我们在谈论验证,那么为什么我们还没有检查空字符串条目。有什么具体原因吗?
我认为下面的方式有所帮助,因为IsNullOrEmpty是系统定义的方法,三元运算符的循环复杂度= 1,而if(){} else {}的值是2。
public static string Truncate(string input, int truncLength)
{
return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
? input.Substring(0, truncLength)
: input;
}
Run Code Online (Sandbox Code Playgroud)