希望有人有一个好主意。我有这样的字符串:
abcdefg
abcde
abc
我需要的是,如果超过指定的长度,则必须将它们显示为这样:
abc ..
abc ..
abc
我可以使用任何简单的C#代码吗?
希望有人有一个好主意。我有这样的字符串:
abcdefg
abcde
abc
我需要的是,如果超过指定的长度,则必须将它们显示为这样:
abc ..
abc ..
abc
我可以使用任何简单的C#代码吗?
Char
s作为限制。不幸的是,图形宽度可以有很大的不同。然后是UTF-16代理,结合了字符,...
Answers:
这是扩展方法中包含的逻辑:
public static string Truncate(this string value, int maxChars)
{
return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
}
用法:
var s = "abcdefg";
Console.WriteLine(s.Truncate(3));
: value.Substring(0, maxChars) + (char)0x2026;
public string TruncString(string myStr, int THRESHOLD)
{
if (myStr.Length > THRESHOLD)
return myStr.Substring(0, THRESHOLD) + "...";
return myStr;
}
忽略命名约定,以防万一他实际上需要THRESHOLD变量或大小始终相同。
或者
string res = (myStr.Length > THRESHOLD) ? myStr.Substring(0, THRESHOLD) + ".." : myStr;
所有的答案都是非常好的,但是,如果您的字符串是句子,只需清理一点,请不要在单词中间打断字符串。
private string TruncateForDisplay(this string value, int length)
{
if (string.IsNullOrEmpty(value)) return string.Empty;
var returnValue = value;
if (value.Length > length)
{
var tmp = value.Substring(0, length) ;
if (tmp.LastIndexOf(' ') > 0)
returnValue = tmp.Substring(0, tmp.LastIndexOf(' ') ) + " ...";
}
return returnValue;
}
.NET Framework中没有内置方法可以执行此操作,但是这是编写自己的非常简单的方法。这是一些步骤,尝试自己制作,并让我们知道您的想法。
创建一个方法,也许是一个扩展方法 public static void TruncateWithEllipsis(this string value, int maxLength)
检查传入的值是否大于maxLength
使用Length
属性指定的值。如果value
不大于maxLength
,则返回value
。
如果我们没有按原样返回传入的值,那么我们知道需要截断。因此,我们需要使用SubString
方法获得字符串的较小部分。该方法将基于指定的开始和结束值返回字符串的较小部分。结束位置是maxLength
参数传递的位置,请使用该位置。
返回字符串的子部分以及省略号。
以后的一个很好的练习是更新该方法,并使它仅在完整的单词后才中断。您还可以创建一个重载以指定显示字符串被截断的方式。例如,如果您的应用程序设置为通过单击显示更多详细信息,则该方法可以返回“(单击更多)”而不是“ ...”。
也许为此目的实现一个方法更好:
string shorten(sting yourStr)
{
//Suppose you have a string yourStr, toView and a constant value
string toView;
const int maxView = 3;
if (yourStr.Length > maxView)
toView = yourStr.Substring(0, maxView) + " ..."; // all you have is to use Substring(int, int) .net method
else
toView = yourStr;
return toView;
}
我在搜索“ C#省略号”后发现了这个问题。使用各种答案,我创建了具有以下功能的自己的解决方案:
在尝试截断字符串之前,请验证该字符串是否为null或为空。
public static class StringExtensions
{
public static string Truncate(this string value,
int maxLength,
bool addEllipsis = false)
{
// Check for valid string before attempting to truncate
if (string.IsNullOrEmpty(value)) return value;
// Proceed with truncating
var result = string.Empty;
if (value.Length > maxLength)
{
result = value.Substring(0, maxLength);
if (addEllipsis) result += "...";
}
else
{
result = value;
}
return result;
}
}
我希望这可以帮助其他人。
我最近有这个问题。我在nvarcharMAX DB字段中存储了4000个字符的“状态”消息。但是,我的状态消息正在建立并遇到异常。
但这不是截断的简单情况,因为任意截断会孤立状态消息的一部分,所以我确实需要在字符串的一致部分“截断”。
我通过将字符串转换为字符串数组,删除了第一个元素然后恢复为字符串来解决了该问题。这是代码(“ CurrentStatus”是保存数据的字符串)...
if (CurrentStatus.Length >= 3750)
{
// perform some truncation to free up some space.
// Lets get the status messages into an array for processing...
// We use the period as the delimiter, then skip the first item and re-insert into an array.
string[] statusArray = CurrentStatus.Split(new string[] { "." }, StringSplitOptions.None)
.Skip(1).ToArray();
// Next we return the data to a string and replace any escaped returns with proper one.
CurrentStatus = (string.Join(".", statusArray))
.Replace("\\r\\n", Environment.NewLine);
}
希望它可以帮助某人。