Scala';s包含字符串类的方法不';找不到结尾有新行的字符串。为什么?
我有一个包含以下内容的txt文件: abc 我用记事本制作了这个文件,并将它保存在UTF-8中。从Scala解释器调用带有Scala';s包含字符串类的方法不';找不到结尾有新行的字符串。为什么?,scala,io,character-encoding,Scala,Io,Character Encoding,我有一个包含以下内容的txt文件: abc 我用记事本制作了这个文件,并将它保存在UTF-8中。从Scala解释器调用带有“abc”的以下函数将产生false该函数使用字符串+文件的最后一个字符搜索txt文件 def isWordKnown(word: String):Boolean={ val inputStreamFromKnownWordsList=new FileInputStream("D:\\WordTracker\\new english\\test.txt")
“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)
}
你的方法对你来说太复杂了。而且,它也不是真正的scala惯用语(使用
返回
和变量
?)
看看这个例子:
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并讨论文件编码,请检查scala在
行之前获取的文件内容(一个简单的println
)。包含(word)
您的方法太复杂了,无法满足您的需要。而且,它也不是真正的scala惯用语(使用返回
和变量
?)
看看这个例子:
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并讨论文件编码,请检查scala在
行之前获取的文件内容(简单的println
)。contains(word)
错误在于您假设EOL的长度为一个字符。在Windows上是两个字符
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
你也可以检查一下
scala> data.endsWith("abc" + util.Properties.lineSeparator)
res1: Boolean = true
错误在于您假设EOL的长度为一个字符。在Windows上是两个字符
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
你也可以检查一下
scala> data.endsWith("abc" + util.Properties.lineSeparator)
res1: Boolean = true
或者fromFile(f).getLines exists(uendswith word)
如果目的是检查一行是否以单词结尾。或者fromFile(f).getLines exists(endsWith word)
如果目的是检查一行是否以单词结尾。另请参阅