如何使用scala.io.Source删除字节顺序标记?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用scala.io.Source删除字节顺序标记?相关的知识,希望对你有一定的参考价值。

当使用Byte order mark从文件中读取时,scala.io.Source正在使我的正则表达式失败。 This answer是使用java.io的轻量级解决方案。 scala.io.Source有什么类似的东西,还是因为一个字节而必须恢复到Java?

答案

基于Joe K在他的评论中的想法,并使用Andrei Punko's answer来解决Java和Alvin Alexander's Scala code中的问题,将可能包含字节顺序标记的文件读入字符串数组的最简单的解决方案是:

@throws[IOException]
def skip(reader: Reader): Unit = {
    reader.mark(1)
    val possibleBOM = new Array[Char](1)
    reader.read(possibleBOM)
    if (possibleBOM(0) != 'ufeff') reader.reset
}

val br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))
skip(br)

val lines = {
    val ls = new ArrayBuffer[String]()
    var l: String = null
    while ({l= br.readLine; l != null}) {
      ls.append(l)
    }
    br.close
    ls.toArray
}

以上是关于如何使用scala.io.Source删除字节顺序标记?的主要内容,如果未能解决你的问题,请参考以下文章

Scala io操作

scalaIO

3小时Scala入门

编写没有字节顺序标记 (BOM) 的文本文件?

从列表中的对象中删除字节顺序标记

在 Scala 2.7 中读取文件的行,保留行终止符