我想在 Twitter 上为我们的客户发布服务器消息。
不幸的是,Twitter 只允许发布 140 个字符或更少。这是一种耻辱。
现在,我必须编写一个算法,将来自服务器的不同消息连接在一起,但将它们缩短到最多 140 个字符。
这很棘手。
代码
static string concatinateStringsWithLength(string[] strings, int length, string separator) {
// This is the maximum number of chars for the strings
// We have to subtract the separators
int maxLengthOfAllStrings = length - ((strings.Length - 1) * separator.Length);
// Here we save all shortenedStrings
string[] cutStrings = new string[strings.Length];
// This is the average length of all the strings
int averageStringLenght = maxLengthOfAllStrings / strings.Length;
// Now we check how many strings are longer than the average string
int longerStrings = 0;
foreach (string singleString in strings)
{
if (singleString.Length > averageStringLenght)
{
longerStrings++;
}
}
// If a string is smaller than the average string, we can more characters to the longer strings
int maxStringLength = averageStringLenght;
foreach (string singleString in strings)
{
if (averageStringLenght > singleString.Length)
{
maxStringLength += (int)((averageStringLenght - singleString.Length) * (1.0 / longerStrings));
}
}
// Finally we shorten the strings and save them to the array
int i = 0;
foreach (string singleString in strings)
{
string shortenedString = singleString;
if (singleString.Length > maxStringLength)
{
shortenedString = singleString.Remove(maxStringLength);
}
cutStrings[i] = shortenedString;
i++;
}
return String.Join(separator, cutStrings);
}
这个问题
该算法有效,但不是很优化。它使用的字符比实际使用的要少。
这样做的主要问题是该变量longerStrings
是相对于maxStringLength
, 并且是向后的。
这意味着如果我改变longerStrings
,maxStringLength
就会改变,等等。我必须做一个while循环并执行此操作,直到没有更改为止,但我认为对于这样一个简单的情况没有必要。
你能告诉我如何继续吗?
或者也许已经存在类似的东西?
谢谢!
编辑
我从服务器收到的消息如下所示:
- 信息
- 学科
- 日期
- 身体
- 信息
- 学科
- 日期
- 身体
等等。
我想要的是用分隔符连接字符串,在这种情况下是分号。
应该有一个最大长度。长字符串应首先缩短。
例子
这是一个主题
这是身体,有点长...
25.02.2013
这是...
这是...
25.02.2013
我想你应该已经明白了 ;)