我正在尝试读取具有以下内容的file.txt:
乔恩 西亚 亚历克斯 杰德
并使用节点js,我想找到以字母j开头的单词 这是我写的:
let fs = require('fs');
fs.readFile('./file.txt', (err, info)=>{
let j;
let con = 0;
console.log(err)
if(err) return;
for (j=0; j < info.length; ++j)
if (info[j] == 10)
con++;
console.log(con)
if(info.indexOf('j') > -1){
console.log(info.toString())
}
})
我想打印文本文件中的行数以及以字母j开头的单词 但计数器结果为3,而应为4,并显示所有信息:
jone
sia
alex
jad
它应该只打印 jone 和 jad
如何解决这个问题
答案 0 :(得分:2)
您可以使用readline
内置核心模块并执行以下操作:
var rl = require('readline'), fs = require('fs')
var lineReader = rl.createInterface({ input: fs.createReadStream('file.txt') })
lineReader.on('line', function (name) {
if(name.startsWith('j'))
console.log(name)
})
答案 1 :(得分:1)
这是您的file.txt:
app.json
这是代码:
jone
sia
alex
jad
这将为您提供包含'j'的所有内容
如果您想要以j开头的内容,则可以编写自己的过滤器函数,如下所示:
const fs = require('fs');
const output = fs
.readFileSync('file.txt', 'utf8')
.trim()
.split('\n')
.filter(word => word.includes('j'));
console.log(output);
答案 2 :(得分:1)
我建议使用正则表达式方法。
info
的类型应为string
,因此可以使用String.prototype
函数match()
,如下所示:
let matches = info.match(expression);
或您的情况:let matches = info.match(/\bj\w+/g);
(example)
您可以使用正则表达式通过检测原始数据中的line breaks
来检测文本文件的行数(如果可能):
let lines = info.match(/\n/g).length + 1;
(example)
答案 3 :(得分:1)
所有这些答案都太过复杂了。
只需遍历所有单词并检查其是否以字母开头:
for (const word of wordList.split("\n")) {
if (word.startsWith("j")) console.log(`${word} start with the letter j`);
}