【发布时间】:2021-05-02 04:52:08
【问题描述】:
有人问了我一个问题,现在我因为无法得出准确/正确的结果而自责。
假设我们有一个函数可以将一个字符串拆分为多行,但在我们“拆分”到新行之前,每行必须有 x 个字符:
private string[] GetPagedMessages(string input, int maxCharsPerLine) { ... }
对于每一行,我们需要在行尾加入“x/y”,基本上是 1/4、2/4 等... 现在,分页机制也必须是每行长度限制的一部分。
我已经过度劳累、过度思考和绊倒了一些事情,这似乎很简单,但对于我的生活,我无法弄清楚!我没有“得到”什么?
我对什么感兴趣?计算和部分逻辑,但主要是根据每行的最大字符数计算拆分输入需要多少行,这还需要包括 x/y。
请记住:x/y 可以有多个数字(即:不仅是 1/4,还有 10/17 或 99/200)
样品:
input = "这是一条长消息"
maxCharsPerLine = 10
输出:
This i 1/4 // << Max 10 chars
s a lo 2/4 // << Max 10 chars
ng mes 3/4 // << Max 10 chars
sage 4/4 // << Max 10 chars
总体而言,逻辑很简单,但让我失望的只是计算。
【问题讨论】:
-
如果忽略 x/y 部分的可能长度,我想您必须首先计算出您有多少行。基于此,您可以确定 x/y 部分的长度,然后再次检查这是否会更改总行数。重复直到你有一个稳定的结果。
-
您使用的是固定宽度字体吗?如果不是,计数字符将不代表任何字符串的实际显示长度。
-
我不太明白。鉴于
input = "This is a long message"maxCharsPerLine = 10 should be split to 4 lines和另一个input = "123456", maxCharsPerLine = 6为什么后者应该分成 3 行而不仅仅是 1 行?这 3 行来自哪里?它可以拆分为 6 到 1 行之间的任何内容,但 maxCharsPerLine -
@Fabjan 想到了 SMS 消息。您希望在其限制范围内最大限度地填充消息以尽可能少地发送,但附加一个寻呼机以让接收者知道还有更多消息要发送。因此,您的 6 个字符且限制为 6 个字符的消息会像“12 1/3”、“34 2/3”、“56 3/3”一样发送。是的,我收到的短信实际上是“。(3/3)”,所以它并不像看起来那么简单。
-
@CodeCaster 感谢您的解释。我错过了分页也是消息的一部分,并且 6 个字符的限制也包括它,并且像 '1234561/1' 这样的东西实际上会使它变成 9 个字符长。
标签: c# data-paging