JavaScript如何将字符串每160个字符分割,并添加计数器?

3

我想要将一个字符串分割成多个长度为160的子字符串,我觉得这很容易:var splits = myString.split(160);

但是显然这样做行不通。

另外,我还想添加一个计数器(类似于Android短信风格)。

假设我们有以下示例字符串(237个字符):

你好,这条消息有237个字符,太长了,无法一次发送,因此需要将其拆分成多条消息......这实际上是为了短信应用而设计的,因此我们需要拆分字符串。

最终的输出结果应该是:

你好,这条消息有237个字符,太长了,无法一次发送,因此需要将其拆分成多条消息...... thi(1/2)


s string will be split up into multiple messages... 这实际上是为了短信应用而设计的,因此我们需要拆分字符串。(2/2)

现在,如果消息总数始终不超过9条,那么我可以这样做:

//ok, so the next line won't work, but it gets the point across...
var splits = mystring.split(155);
var s = splits.length;
for(var i = 0; i < s; i++)
  splits[i] += '('+(i+1)+'/'+s+')';

但问题在于可能会有多达15个消息,因此附加到末尾的字符数是不一致的(我们希望将字符计数保持尽可能低,不添加0填充数字小于10的选项)。

我该怎么做?


@naveen:使用错误的函数真的值得一个-1吗?一个简单的评论就足够了... - Hailwood
1
干杯,我们都有那样的日子 ;) - Hailwood
2个回答

3

这里是代码片段。

该代码会在160 * 15个字符处截断(因为您暗示15是限制)。 它在顶部设置了这两个数字作为变量,因此您可以调整任何一个。

更新

新的代码片段:http://jsfiddle.net/Lobstrosity/nwaYe/2/

看起来有点丑...但它能用...

  1. 它会判断 (x/y) 中的 y 是一个数字还是两个数字。
  2. 它在建立实际消息时在指示器中使用占位符。
  3. 它替换占位符。
  4. 最后,在 charLimit 上拆分。

希望有人能想出更简洁的方法来做到这一点...


糟糕,它总是显示N/15。我会想出其他办法的 :) - Lobstrosity
不,代码是错误的。无论消息有多长,指示器始终显示N/15。我现在正在尝试解决这个问题。 - Lobstrosity

1

我认为你获取最优消息(即最大长度)的最佳选择可能是分别处理每个最大消息长度类别。

使用当前代码处理少于十条消息的情况,然后扩展该方法以涵盖多达99条消息的情况。如果有可能超过100条消息,则可以进一步扩展,但这似乎不太可能。

以下是代码示例:

if (mystring.length < (155 * 9)) {
    var splits = mystring.split(155);
    var s = splits.length;
    for(var i = 0; i < s; i++)
        splits[i] += '('+(i+1)+'/'+s+')';
} else if (mystring.length < (154*9)+(153 * 90)) {
    var splits1 = mystring.substr(0,154*9).split(154);
    var splits2 = mystring.substr(154*9).split(153);
    var splits = [];
    var s = splits1.length + splits2.length;
    for (var i = 0; i < splits1.length; i++)
        splits[i] = splits1[i] + '('+(i+1)+'/'+s+')';
    for (var i = 10; i < splits2.length+10; i++)
        splits[i] = splits2[i-10] + '('+(i+1)+'/'+s+')';    
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接