pos返回由 返回的最后一个字符的位置next(),但诀窍是位置是由位置的编码器 ( scala.io.Position)编码的行和列的组合Integer:
对象 Position 提供了方便的方法来将 * 行号和列号编码为一个整数。编码后的行*(列)编号范围从0到LINE_MASK(COLUMN_MASK),其中*0表示行(列)未定义,* 1
表示第一行(列)...
https://github.com/scala/scala/blob/v2.11.8/src/library/scala/io/Position.scala
http://www.scala-lang.org/api/2.11.8/#scala.io.Source $RelaxedPosition$
使用Postioner以获得更多可读信息:
当前输入和位置,以及下一个字符方法委托给定位器。
例子:
val doc = scala.io.Source.fromFile("aaa.txt")
val positioner = new doc.Positioner()
val positioned = doc.withPositioning(positioner)
positioned.next()
scala> positioner.cline -> positioner.ccol
res15: (Int, Int) = (1,2)
positioned.next()
scala> positioner.cline -> positioner.ccol
res17: (Int, Int) = (1,3)
PSSource旨在将数据作为字符流读取,因此它为您提供诸如getLines()等之类的便利,所以基本上这就是为什么Positioner使用行和列而不是绝对位置的原因。
如果您需要Iterator返回每个字符的绝对位置,请使用zipWithIndex:
scala> val doc = scala.io.Source.fromFile("aaa.txt").zipWithIndex
doc: Iterator[(Char, Int)] = non-empty iterator
scala> doc.next()
res38: (Char, Int) = (a,0)
scala> doc.next()
res39: (Char, Int) = (a,1)
scala> doc.next()
res40: (Char, Int) = (a,2)
scala> doc.next()
res41: (Char, Int) = (a,3)
scala> doc.next()
res42: (Char, Int) =
(
,4)