分叉一个字符串,删除字符串的中间而不是结束

时间:2015-06-09 14:44:07

标签: c# .net string formatting

我希望类似this question I found的内容引导我this answer on another question,我试图将其从转换为我尝试转换它...失败非常严重:

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。我无法弄清楚它并且我已经尝试过了许多不同的版本主要导致输入无序。

如果可能我希望它是一个简单的功能,而不是包含其他库或每次调用初始化一个新对象,因为我打算在快速会议。我真的很喜欢不切断单词并放置省略号,但这不是必需的。

2 个答案:

答案 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)
    );
}

Demo.

答案 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);
}