将字符串分岔,去掉字符串的中间部分而不是末尾

本文关键字:字符串 中间部 | 更新日期: 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);
}