将字符串分叉,删除字符串的中间而不是结尾

Bifurcate a string, removing the middle of the string instead of end

我想要类似于 this question I found lead me to this answer on another question where I tried to convert it from to 我尝试转换它的东西...非常失败:

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 或类似的事情时..我不太明白,我尝试了很多不同的版本主要导致输入乱序。

如果可能的话我希望它是一个简单的函数,不包括其他库或在每次调用时初始化一个新的object,因为我计划使用它很快 session。我真的很希望它不要切断单词并放置省略号,但这不是必需的。

this returns 123...012 for 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);
}

问题是您插入 ...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)
    );
}

Demo.