Scala:使用自定义分隔符读取文件

Scala:使用自定义分隔符读取文件,scala,Scala,逐行读取文件很简单: scala.io.Source.fromFile(file).getLines() 但是,如何使用与新行不同的分隔符来迭代文件呢 我可以将整个文件作为一个字符串加载,然后将其拆分,但我认为在大型文件上(readDelimited1)的性能会很差。或者,我可以决定包装Java的扫描器,它的性能可能会更好,但它有点难看(readDelimited2) 是否有一种很好的Scala'isque方法可以使用自定义定界符在文件上迭代?Scala.io.Source.fromFile(

逐行读取文件很简单:

scala.io.Source.fromFile(file).getLines()
但是,如何使用与新行不同的分隔符来迭代文件呢

我可以将整个文件作为一个字符串加载,然后将其拆分,但我认为在大型文件上(
readDelimited1
)的性能会很差。或者,我可以决定包装Java的扫描器,它的性能可能会更好,但它有点难看(
readDelimited2


是否有一种很好的Scala'isque方法可以使用自定义定界符在文件上迭代?

Scala.io.Source.fromFile(file.getLines()
调用
String java.io.BufferedReader.readLine(boolean ignoreLF)抛出IOException


更改它并不容易。使用
扫描仪
是一个好方法。

我认为使用扫描仪不是一个坏主意。导入
JavaConversions.\u
后,您可以编写
…使用delimiter(delimiter)。asScala
,您可能更喜欢它。
def readDelimited1(file: java.io.File, delimiter : String) : Iterator[String] = {
  scala.io.Source.fromFile(file).getLines().mkString("\n").split(delimiter).iterator
}

def readDelimited2(file: java.io.File, delimiter : String) : Iterator[String] = {
  val scanner = new java.util.Scanner(file).useDelimiter(delimiter)
  collection.JavaConversions.asScalaIterator(scanner)
}