ala*_*lan 24 java string scala tostring
我有一个包含10行的文件 - 我想检索它,然后用换行符("\n")分隔符拆分它们.
这就是我做的
val data = io.Source.fromFile("file.txt").toString;
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在换行符上拆分文件时,这会导致错误.
然后我试过了
val data = io.Source.fromFile("file.txt").mkString;
Run Code Online (Sandbox Code Playgroud)
它奏效了.
有没有搞错?有人能告诉我这两种方法有什么区别吗?
S.R*_*R.I 34
我们来看看类型吧?
scala> import scala.io._
import scala.io._
scala> val foo = Source.fromFile("foo.txt")
foo: scala.io.BufferedSource = non-empty iterator
scala>
Run Code Online (Sandbox Code Playgroud)
现在,您已读取文件的变量foo.txt是迭代器.如果toString()对它执行调用,它不会返回文件的内容,而是返回您创建的迭代器的String表示形式.OTOH,mkString()读取迭代器(即迭代它)并根据从中读取的值构造一个长字符串.
有关更多信息,请查看此控制台会话:
scala> foo.toString
res4: java.lang.String = non-empty iterator
scala> res4.foreach(print)
non-empty iterator
scala> foo.mkString
res6: String =
"foo
bar
baz
quux
dooo
"
scala>
Run Code Online (Sandbox Code Playgroud)
nom*_*mad 26
toString方法应该返回对象的字符串表示.它经常被覆盖以提供有意义的表示.mkString方法是在集合上定义的,是一种将集合的元素与提供的字符串连接起来的方法.例如,尝试以下方法:
val a = List("a", "b", "c")
println(a.mkString(" : "))
Run Code Online (Sandbox Code Playgroud)
你会得到"a:b:c"作为输出.mkString方法通过使用您提供的字符串连接集合的元素,从集合中创建了一个字符串.在您发布的特定情况下,mkString调用将BufferedSource迭代器返回的元素与空字符串连接起来(这是因为您调用了没有参数的mkString).这导致简单地将集合中的所有字符串(由BufferedSource迭代器产生)连接在一起.
另一方面,在这里调用toString并没有多大意义,因为你得到的(当你没有得到错误时)是BufferedSource迭代器的字符串表示形式; 它只是告诉你迭代器是非空的.
| 归档时间: |
|
| 查看次数: |
25912 次 |
| 最近记录: |