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)