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

Split string into an array with a fixed number of characters

本文关键字:字符 数组 字符串 拆分      更新时间:2023-09-26

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

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

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

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

我想

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

知道吗?

这是我的实际代码,测试.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)或书的长度(如果你接近结尾)进行拆分

当然,这种逻辑是非常愚蠢的,这意味着你不在乎你是否在单词或句子中间停止字符......等等。

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

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>