将字符串分割成固定字符数的数组
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>
我目前正在创建一个小应用程序,每天自动推文中的部分内容。
我的书在一个文本文件中,因此我想将这个文本文件的内容拆分成一个 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>