我正在从文本文件中读取逗号分隔的数字,并在文件中执行所有数字的添加 - 但我得到的总和是错误的.
1,2,3
Run Code Online (Sandbox Code Playgroud)
val file=Source.fromFile("D:/scala/test.txt")
val f1=file.foldLeft(0)((a,b)=>a+b)
println(f1)
Run Code Online (Sandbox Code Playgroud)
238
Run Code Online (Sandbox Code Playgroud)
我可以在数组上执行添加并且它工作正常,但是从文件中读取数据时我无法得到正确的答案.
A Source是一个Iterator[Char],所以你foldLeft在Chars 上运作.当您添加两个Chars时+,您将添加其十进制值.
您的源正在读取该文件中的每个字符,包括逗号.如果你看一个ASCII图表,你会看到逗号(即,)的十进制值是44,而1,2和3分别是49,50和51.
这给了我们44 + 44 + 49 + 50 + 51 = 238,这是你看到的结果.
你真正想要的可能是这样的:
哪个可以写成
Source.fromFile("D:/scala/test.txt").mkString.split(',').map(_.toInt).sum
Run Code Online (Sandbox Code Playgroud)
要么
Source.fromFile("D:/scala/test.txt").mkString.split(',').map(_.trim.toInt).sum
Run Code Online (Sandbox Code Playgroud)
请注意,toInt如果无法将输入解析为int ,则抛出.