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