【问题标题】:How to read a file and store words to a list in scala?如何读取文件并将单词存储到scala中的列表中?
【发布时间】:2014-12-03 22:49:40
【问题描述】:

我正在尝试将 txt 文件中存在的所有单词(标点符号和数字除外)存储到列表中?

我对 scala 很陌生,不知道该怎么做?有人可以帮忙吗?

编辑:

我现在就是这样做的:

for(line <- Source.fromFile("src/stop_words.txt").getLines())
      {
      //println(line)
      lst = line

      }
      println(lst)

它在 lst=line 上给了我一个红线,并说重新分配给一个 val。我不知道为什么:(

【问题讨论】:

  • 看看scala.io.Source.fromFile(...)。然后过滤标点符号和数字的内容。
  • @Brian 你能在我的问题中看到编辑吗?我有一些问题。

标签: scala


【解决方案1】:

假设每行可以有多个单词,更好的解决方案是

val words = """([A-Za-z])+""".r
val all = io.Source.fromFile("path/to/file.txt").getLines.flatMap(words.findAllIn).toList

【讨论】:

    【解决方案2】:

    您可以使用 scala.io.Source 与过滤器通过正则表达式和 toList 结束

    io.Source.fromFile("path/to/file.txt").
      getLines().
      filter(_.matches("[A-Za-z]+")).
      toList
    

    更新

    你的文件里有什么?这个简单的代码按预期工作

    val list = io.Source.fromBytes(
        """aaa
          |bbb
          |123
          |.-ddg
          |AZvb
        """.stripMargin.toArray.map(_.toByte)).
        getLines().
        filter(_.matches("[A-Za-z]+")).
        toList
    
      println(list)
    

    输出:

    List(aaa, bbb, AZvb)
    

    【讨论】:

    • 嗨,当我执行 var fillist = io.Source.fromFile("/Users/xyz/Desktop/file1.txt") 时。获取线()。过滤器(_.matches(“[A-Za-z]+”))。 toList println(fillist) 我得到一个空列表作为输出,这是为什么呢?
    • 看我的更新,没有文件内容很难说,它应该可以工作,或者你需要更新正则表达式来匹配
    猜你喜欢
    • 2016-05-15
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多