下面是我用split编写的一个版本:
fileName.split('.').init ++ Seq("js") mkString "."
这可以将例如foo.bar.coffee
转换为foo.bar.js
。
我喜欢的是:
indexOf()
这样的东西
我不喜欢的是:
,
我怎样才能写一个更简单的版本呢?
更新:下面是很好的答案!简而言之:
上面我的最初方法似乎还不错,尽管它没有涵盖一些角落的情况,但是如果您需要使用those
fileName.split('.').init :+ "js" mkString "."
发布于 2011-01-19 02:39:38
恐怕你实际上得花更长的时间去做可能是最明智、最有力的事情:
scala> "oops".split('.').init ++ Seq("js") mkString "."
res0: String = js
有点出乎意料的失去你的文件的名称(至少如果你是一个最终用户)!
让我们试试regex:
scala> "oops".replaceAll("\\.[^.]*$", ".js")
res1: java.lang.String = oops
没有丢失文件名,但也没有扩展名。Ack。
让我们修复它:
def extensor(orig: String, ext: String) = (orig.split('.') match {
case xs @ Array(x) => xs
case y => y.init
}) :+ "js" mkString "."
scala> extensor("oops","js")
res2: String = oops.js
scala> extensor("oops.txt","js")
res3: String = oops.js
scala> extensor("oops...um...","js")
res4: String = oops...js
或使用regex:
scala> "oops".replaceAll("\\.[^.]*$", "") + ".js"
res5: java.lang.String = oops.js
scala> "oops.txt".replaceAll("\\.[^.]*$", "") + ".js"
res6: java.lang.String = oops.js
scala> "oops...um...".replaceAll("\\.[^.]*$", "") + ".js"
res7: java.lang.String = oops...um...js
(请注意角落中文件名以句点结尾的不同行为。)
发布于 2011-01-19 01:55:23
一个简单的正则表达式替换会起作用吗?
比如:
scala> "package.file.java".replaceAll("(\\.[^\\.]*$)", ".rb")
scala> "package.file.rb"
发布于 2011-01-19 07:39:57
lastIndexOf怎么了?
fileName.take(1 + fileName.lastIndexOf(".")) + "js"
当然,如果您想在不包含任何点的情况下保留fileName,则需要做更多的工作
(if (fileName.contains('.')) fileName.take(fileName.lastIndexOf("."))
else fileName) + ".js"
https://stackoverflow.com/questions/4730866
复制相似问题