我有一个包含以下内容的txt文件:
ABC
我用记事本制作了文件并将其保存为UTF-8。使用Scala Interpreter中的"abc"
调用以下函数会生成false
该函数使用字符串+最终字符文件搜索txt文件。
def isWordKnown(word: String):Boolean={
val inputStreamFromKnownWordsList=new FileInputStream("D:\\WordTracker\\new english\\test.txt")
var stringWriter=new StringWriter()
IOUtils.copy(inputStreamFromKnownWordsList,stringWriter,"UTF-8")
val knownWordsString=stringWriter.toString()
val endOfLine=knownWordsString.substring(knownWordsString.length()-1, knownWordsString.length())
return knownWordsString.contains(word+endOfLine)
}
答案 0 :(得分:2)
错误是你假设EOL的长度是一个char。在Windows上它是两个字符。
try
{
/// ...
}
catch (Exception ex)
{
if (ex is ArgumentException)
{
/// handle known or specific exceptions here
}
else
{
/// log then rethrow unhandled exceptions here
logExceptions(ex);
throw;
}
}
EOL长度为scala> val data = "abc\r\n"
data: String =
"abc
"
scala> val end = data.substring(data.length - 1, data.length)
end: String =
"
"
scala> data.contains("abc" + end)
res0: Boolean = false
。
您也可以查看
scala.util.Properties.lineSeparator.length
答案 1 :(得分:1)
你的方法对你想要的东西来说太复杂了。此外,它不是真正的scala惯用语(使用return
和var
?)
看看这个例子:
def isWordKnown(word: String): Boolean = {
val lines = scala.io.Source.fromFile("path/file.txt").mkString
lines.contains(word)
}
我得到了:
scala> isWordKnown("abc")
res1: Boolean = true
由于您正在使用Windows并谈论文件编码,请在println
之前检查scala获取的文件内容(简单lines.contains(word)
)