我的教授正在使用 Horstmann 的书“不耐烦的 Scala”教我们 Scala,我们的一项家庭作业直接来自这本书;第 4 章,练习 2。
我们希望以文本格式阅读电子书,教授指定输入文件应为“Moby Dick”,可从 Gutenberg 项目免费获得:http: //www.gutenberg.org/ebooks/2701。 txt.utf-8
我的代码有效,就计算单词的实例而言。但是,他添加了要求,我们必须将输出格式化为两列,其中单词左对齐,计数右对齐。为此,我正在确定书中最长的单词,以便计算“单词”列的宽度。但是,我得到的字符串长度值是错误的。事实上,它告诉我所有的字符串都是相同的长度。"a" 被报告为长度 26,就像 "Whale"、"Ishmael" 等...
这是代码:
object Chapter4Exercise2 extends App {
//for sorting
import util.Sorting._
//grab the file
val inputFile = new java.util.Scanner(new java.io.File("moby.txt"))
//create a mutable map where key/values == word/count
val wordMap = collection.mutable.Map[String, Int]() withDefault (_ => 0)
//for formatting output (later), the longest word length is relevant
var longestWord = 0
var theWord: String = ""
//start reading each word in the input file
while (inputFile hasNext) {
//grab the next word for processing, convert it to lower case, trim spaces and punctuation
var nextWord = inputFile.next().toLowerCase().trim().filter(Character.isLetter(_))
//if it's the longest word, update both theWord and longestWord
if (nextWord.size > longestWord) longestWord = nextWord.size; theWord = nextWord; println(theWord + " " + longestWord)
//update the map value for the key with same value as nextWord
wordMap(nextWord) += 1
}
println("Longest word is " + theWord + " at " + longestWord + " Characters")
}
这些行的输出:
if (nextWord.size > longestWord) longestWord = nextWord.size; theWord = nextWord; println(theWord + " " + longestWord)
和
println("Longest word is " + theWord + " at " + longestWord + " Characters")
很遥远。它告诉我输入文件中的每个单词都是 26 个字符长!
这是输出的一个小样本:
外壳 26
26日
26
冲浪26
海滩 26
和 26
然后 26
潜水 26
下降 26
进入 26
我错过了什么/做错了什么?