将字符串分岔,去掉字符串的中间部分而不是末尾
本文关键字:字符串 中间部 | 更新日期: 2023-09-27 17:54:46
我想要类似于这个问题的东西,我发现导致我在另一个问题上找到这个答案,我试图将它从php转换为c#,我试图转换它…失败非常严重:
private string trimString(string str, int maxCharacters = 16)
{
int textLength = str.Length;
return str.Substring(maxCharacters/2, textLength-maxCharacters).Insert(maxCharacters/2,"...");
}
当我想做123...012
或类似的事情时,做trimString("123456789", 9)
输出123...789
。我不太明白,我试了很多不同的版本,结果大多是输入顺序混乱。
如果可能的话我希望它是一个简单的函数,不包括其他库或初始化一个新对象每次调用,因为我计划在快速会话中使用这个很多。我真的不希望它切断单词并放置省略号,但这不是必需的。
问题是您插入...
的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)
);
}
演示。
这返回123...012
对于trimString("123456789012", 6)
的前3个字符和后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);
}