将字符串拆分为具有固定字符数的数组

时间:2015-03-12 15:56:55

标签: javascript arrays split character

我目前正在创建一个小应用程序,每天自动发布部分书籍。

我的书位于文本文件中,因此我希望将此文本文件的内容拆分为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]);
}




谢谢

1 个答案:

答案 0 :(得分:0)

你可以做什么,而不是在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将保留最后一次拆分的位置,并且还会指示已拨打多少字符。
  • 现在你需要检查你要发推的字符数,以确保你不会超过书中的字符长度
  • 如果您接近结尾,则按照您希望的字符数量({1}}或书籍长度从上一个已知位置进行拆分

当然这个逻辑非常虚拟,这意味着如果你停止在单词或句子中间的字符等等,你就不在乎了。

更新: 我提供的代码是一个通用的思维过程,它不一定是复制/粘贴的东西。但是,从您粘贴的代码中,您可以尝试:

lastSplit + 140

更新后的II:使用虚拟书籍的工作代码(以说服你它有效!)

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));
}
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(''));