将字符串分割成固定字符数的数组

Split string into an array with a fixed number of characters

我目前正在创建一个小应用程序,每天自动推文中的部分内容。

我的书在一个文本文件中,因此我想将这个文本文件的内容拆分成一个 140 个字符长的字符串数组。

我想使用诸如 split() 之类的函数,但到目前为止我没有得到好的结果。

顺便说一句,我想创建的字符串之间没有特定的分隔符。

我想计算文本文件中的字符数,然后定义 limit(即拆分数)有 140 个字符串,但我想必须有是一个更直观的功能。

有什么想法吗?

这是我的实际代码,test.txt以文本格式链接到本书。

var fs = require('fs');
var array = fs.readFileSync('./test.txt').toString().match("{1,140}");
for(i in array) {
    console.log(array[i]);
}

感谢您的回答,这是我的新代码。控制台返回奇怪的数字。

var fs = require('fs');
var book = fs.readFileSync('./test.txt');
var lastSplit; // position of the last split that you will cache
var limit   = book.length > 140 ? 140 : book.length - lastSplit;
var urlsToAdd = book.slice(lastSplit, lastSplit + limit);
for(i in book) {
    console.log(book[i]);
}

谢谢

你可以做的不是将整本书一次拆分为 n 个拆分,每个拆分由 140 个字符组成,而是记住最后一个拆分的最后位置,这也是之前完成的拆分总数。

var lastSplit; // position of the last split that you will cache
var limit   = book.length - lastSplit > 140 ? 140 : book.length - lastSplit;
var urlsToAdd = book.slice(lastSplit, lastSplit + limit);
  • 因此 lastSplit 将保持最后一次拆分的位置,并且还指示有多少个字符也被发送到推文。
  • 现在您需要检查您要发推文的字符数,以确保您不会超过书本字符长度
  • 您可以从最后一个已知位置开始按照您希望的字符数进行拆分,如果您接近尾声,则可以是 lastSplit + 140 或书的长度

当然这个逻辑很傻,意思是你不在乎你是否停止了单词或句子中间的字符..等等

更新: 我提供的代码是一般的思维过程,不一定是 copy/paste 的东西。但是,从您之后粘贴的代码中,您可以尝试:

var fs = require('fs');
var book = fs.readFileSync('./test.txt');
var lastSplit = 0;

function tweet(book) {
var limit   = book.length - lastSplit > 140 ? 140 : book.length - lastSplit;
var tweet   = book.slice(lastSplit, lastSplit + limit);
lastSplit += limit;
return tweet;
}

while (lastSplit < book.length) {
 console.log(tweet(book));
}

已更新 II:使用虚拟书编写代码(让您相信它有效!)

function tweet(book) {
 var  lastSplit = 0;
 while (lastSplit < book.length) {
  var limit   = book.length - lastSplit > 140 ? 140 : book.length - lastSplit;
  var tweet   = book.slice(lastSplit, lastSplit + limit);
  lastSplit += limit;
  $('body').append('<p>' + tweet + '</p>');
 }
}

// this will generate a dummy string containing numbers from 0-800
tweet(Array.apply(null, {length: 800}).map(Number.call, Number).join(''));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>