查找以特定字母开头的单词

时间:2018-11-13 20:55:08

标签: node.js

我正在尝试读取具有以下内容的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

如何解决这个问题

4 个答案:

答案 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)
})

查看working here

答案 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);

Live Demo Here

答案 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`);
}