C# 我如何用一个“…”来截断字符串&引用;如果它们太长?
希望有人有个好主意。我有这样的字符串:C# 我如何用一个“…”来截断字符串&引用;如果它们太长?,c#,string,C#,String,希望有人有个好主意。我有这样的字符串: abcdefg abcde abc 我需要的是,如果超过规定的长度,则它们应显示如下: abc .. abc .. abc 有什么简单的C代码可以用吗 public string TruncString(string myStr, int THRESHOLD) { if (myStr.Length > THRESHOLD) return myStr.Substring(0, THRESHOLD) + "...";
abcdefg
abcde
abc
我需要的是,如果超过规定的长度,则它们应显示如下:
abc ..
abc ..
abc
有什么简单的C代码可以用吗
public string TruncString(string myStr, int THRESHOLD)
{
if (myStr.Length > THRESHOLD)
return myStr.Substring(0, THRESHOLD) + "...";
return myStr;
}
忽略命名约定,这只是为了防止他实际需要阈值变量,或者如果它总是相同的大小
或者
string res = (myStr.Length > THRESHOLD) ? myStr.Substring(0, THRESHOLD) + ".." : myStr;
代码隐藏:
string shorten(sting s)
{
//string s = abcdefg;
int tooLongInt = 3;
if (s.Length > tooLongInt)
return s.Substring(0, tooLongInt) + "..";
return s;
}
标记:
<td><%= shorten(YOUR_STRING_HERE) %></td>
也许最好实现一种方法:
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;
}
您可以使用Substring函数。当然,下面是一些示例代码:
string str = "abcdefg";
if (str.Length > X){
str = str.Substring(0, X) + "...";
}
在.NET Framework中没有一个内置的方法可以做到这一点,但是这是一个非常容易自己编写的方法。以下是步骤,请尝试自己制作,并让我们知道您的想法
公共静态void truncatewithelipsis(这个字符串值,int maxLength)
maxLength
。如果值
不大于maxLength
,只需返回值
maxLength
参数传入的位置,因此请使用它以后的一个很好的练习是更新这个方法,并且只有在完整的单词之后才将其打断。您还可以创建一个重载来指定如何显示已被截断的字符串。例如,如果您的应用程序设置为通过单击显示更多详细信息,则该方法可以返回“(单击以获取更多信息)”而不是“…” 以下是封装在扩展方法中的逻辑:
public static string Truncate(this string value, int maxChars)
{
return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
}
下面是一个解释椭圆长度的版本:
public static string Truncate(this string value, int maxChars)
{
const string ellipses = "...";
return value.Length <= maxChars ? value : value.Substring(0, maxChars - ellipses.Length) + ellipses;
}
公共静态字符串截断(此字符串值,int maxChars)
{
常量字符串省略号=“…”;
return value.Length我在搜索“C#truncate省略号”后发现了这个问题。使用各种答案,我创建了自己的解决方案,具有以下功能:
一种推广方法
添加省略号
使省略号可选
在尝试截断字符串之前,请验证该字符串是否为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数据库字段中存储了一条4000个字符的“状态”消息。但是,我的状态消息正在累积并遇到异常
但这不是一个简单的截断情况,因为任意截断将孤立状态消息的一部分,所以我确实需要在字符串的一致部分“截断”
通过将字符串转换为字符串数组,删除第一个元素,然后还原为字符串,我解决了这个问题
希望它能帮助某人走出困境。 < P> >所有的很好的答案,但要稍微清理一下,如果你的字符串是句子,不要在一个词中间断开你的字符串。
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;
}
您希望在哪里执行此操作?-在表单、WPF应用程序或网站中-请提供更多详细信息!大多数解决方案的问题是,它们使用大量的Char
s作为限制。不幸的是,图形宽度可能会有很大差异。然后还有UTF-16代理,组合字符,…这不是建议的问题的重复这是一个非常一般的问题,而建议的重复是一个非常具体的问题。这绝对不是建议的问题的重复。这个问题甚至不接近建议的重复。请删除重复属性。Thx。是否可以将它变成一行,我可以使用内联?T如果他在中间拆分一个代码点,他会产生无效的字符串:(我怎么能把它放进:“+字符串+”?谢谢布莱恩。你的答案看起来不错。请原谅我的简单问题,但是我如何使用一个扩展方法?”Unicode U+2026。快速添加以包含空检查谢谢@Malako:value.Substring(0,maxChars)+(char)0x2026;
如果使用省略号字符,则不需要省略号。它的字符长度将始终为1const char eliple=(char)0x2026;
这是唯一一个不会分解单词的答案。因此,我认为唯一正确的答案是@mxmissile-给定OP数据,对于“abcdefg”,截断为3个字符,转到“abc…”即使这样做也不正确。OP示例数据清楚地表明在连续文本中间有一个硬截断。更糟的是,这个答案会产生一个错误。因为数据不包含一个空间,所以<代码> ListTimeXOF/<代码>将返回-1,而<代码>子字符串< /代码>将导致运行时错误。
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;
}
}
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);
}
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;
}