我希望类似this question I found的内容引导我this answer on another question,我试图将其从php转换为c#我尝试转换它...失败非常严重:
private string trimString(string str, int maxCharacters = 16)
{
int textLength = str.Length;
return str.Substring(maxCharacters/2, textLength-maxCharacters).Insert(maxCharacters/2,"...");
}
当我打算做trimString("123456789", 9)
或类似的事情时,我会做123...789
输出123...012
。我无法弄清楚它并且我已经尝试过了许多不同的版本主要导致输入无序。
如果可能我希望它是一个简单的功能,而不是包含其他库或每次调用初始化一个新对象,因为我打算在快速会议。我真的很喜欢不切断单词并放置省略号,但这不是必需的。
答案 0 :(得分:2)
问题在于,您Substring(maxCharacters/2, textLength-maxCharacters)
插入的...
已经包含了您不希望看到的字符 - 456789
。在那之后,没有办法解决它。
你应该做的是选择前缀和后缀,并将它们连接在一起,如下所示:
private static string trimString(string str, int maxCharacters = 16) {
if (str.Length <= maxCharacters) {
return str;
}
var suffixLength = maxCharacters / 2;
// When maxCharacters is odd, prefix will be longer by one character
var prefixLength = maxCharacters - suffixLength;
return string.Format(
"{0}...{1}"
, str.Substring(0, prefixLength)
, str.Substring(str.Length-suffixLength, suffixLength)
);
}
答案 1 :(得分:1)
这将为123...012
trimString("123456789012", 6)
返回...
分隔的第一个和最后3个字符。
public static string trimString(string str, int max = 16)
{
if (str.Length <= max)
{
return str;
}
return str.Substring(0, max / 2) + "..." + str.Substring(str.Length - max / 2, max / 2);
}