如何为拆分后的推文数组添加x/n格式序号且避免字符溢出拆分
推文生成序号溢出问题解决方案
核心原因
原有拆分逻辑是按280字符满额拆分内容,没有给后续追加的序号预留字符空间,拆分完成后再加序号必然会触发长度溢出。
具体实现步骤
- 调整拆分逻辑,提前预留序号的字符位置
序号格式为x/n,字符长度由总条数决定:总条数为个位数时占3字符,两位数占4字符,三位数占5字符,常规场景下直接预留5字符即可覆盖最多999条推文的序号需求。如果需要极致利用字符空间,可以增加预计算步骤:先对内容做一次满长度预拆分得到预估总条数,再按实际总条数计算需要预留的字符长度。 - 调整拆分阈值后再拆分内容
把splitOnLength函数的拆分上限从280字符,调整为280 - 预留序号长度,保证拆分后的单条内容长度加上序号后,总长度不会超过280字符限制。 - 拆分完成后统一追加序号
得到拆分后的内容数组后,遍历数组为每一项末尾拼接对应序号即可。
代码示例(JS)
const MAX_TWEET_LENGTH = 280; // 常规场景直接预留5字符,支持最多999条推文的序号长度 const RESERVED_SUFFIX_LEN = 5; const SPLIT_KEYWORD = "[...]"; function generateFinalTweetArr(rawInput) { // 按关键词拆分原始内容 const keywordSplitArr = rawInput.split(SPLIT_KEYWORD).filter(Boolean); const contentArr = []; // 按扣减预留位后的长度拆分内容 keywordSplitArr.forEach(content => { let remainingContent = content.trim(); while(remainingContent.length > 0) { const splitLen = Math.min(remainingContent.length, MAX_TWEET_LENGTH - RESERVED_SUFFIX_LEN); contentArr.push(remainingContent.slice(0, splitLen).trim()); remainingContent = remainingContent.slice(splitLen).trim(); } }) // 统一追加序号 const total = contentArr.length; return contentArr.map((item, index) => `${item} ${index + 1}/${total}`) }
可选优化
如果需要避免在单词、句子中间拆分,可以在拆分逻辑中增加判断,优先在空格、标点符号位置做截断,提升推文可读性。
内容的提问来源于stack exchange,提问作者Sagar Giri
相关产品推荐
相关产品推荐

