我逐行读取文件,替换子字符串"替换" with substring" replacment"。一旦字符串操作完成,我想将每一行插入一个列表。
def importFile(replaceString:String, filePath:String, replacement:String)= {
val fileLineList = io.Source.fromURL(getClass.getResource(filePath))
.getLines
.foreach(line => {line.replace(replaceString,replacement)}.toList)
print(fileLineList)
}
当我调用该函数时,返回的是:
()
任何想法,?
答案 0 :(得分:2)
如果要返回字符串列表,可以执行以下两项操作之一:
def importFile(replaceString:String, filePath:String, replacement:String)= {
io.Source.fromURL(getClass.getResource(filePath))
.getLines
.map(_.replace(replaceString,replacement))
}
或
def importFile(replaceString:String, filePath:String, replacement:String)= {
val fileLineList = io.Source.fromURL(getClass.getResource(filePath))
.getLines
.map(_.replace(replaceString,replacement))
print(fileLineList)
fileLineList
}
第一个变体不会打印任何内容,但会返回结果(替换后来自文件的所有行)。第二个变体将打印替换版本,然后将其返回。
通常,在Scala中,函数的结果是它的最后一个语句。请记住声明如下:
val myValue = 5
不会返回任何内容(其类型为Unit),而
myValue
(如果之前已定义)将指定结果作为存储在myValue中的内容。
.map(_.replace(replaceString,replacement))
部分应该使用replace来转换每个原始行。 <{1}}是
_
也可以写成
.map(x => x.replace(replaceString, replacement))
但在这个简单的情况下,没有必要。如果你有一个由几个语句组成的映射函数,那么Curlies就有意义了,例如:
.map{x => x.replace(replaceString, replacement)}
最重要的部分是.map{x =>
val derivedValue = someMethod(x)
derivedValue.replace(replaceString, replacement)
}
和.map
:
.foreach
将原始序列转换为新序列(根据映射函数)并返回此序列(在您的情况下,字符串列表)。
.map
遍历给定的序列并对序列中的每个条目执行指定的操作,但它不返回任何内容 - 它的返回类型是Unit。
(检查Scaladoc for List以获取有关这些和其他功能的更多信息: http://www.scala-lang.org/api/2.10.3/index.html#scala.collection.immutable.List )