首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala表达式替换字符串中的文件扩展名

Scala表达式替换字符串中的文件扩展名
EN

Stack Overflow用户
提问于 2011-01-19 01:23:49
回答 7查看 10.7K关注 0票数 11

下面是我用split编写的一个版本:

代码语言:javascript
运行
复制
fileName.split('.').init ++ Seq("js") mkString "."

这可以将例如foo.bar.coffee转换为foo.bar.js

我喜欢的是:

indexOf()

  • it

  • it works

  • 它不依赖于像

这样的东西

我不喜欢的是:

  • ,它不像我希望的
  • 那么短,它可能会混淆一些读者--

我怎样才能写一个更简单的版本呢?

更新:下面是很好的答案!简而言之:

上面我的最初方法似乎还不错,尽管它没有涵盖一些角落的情况,但是如果您需要使用those

  • another,稍微短一些的方法使用regexp,那么这个方法是可以用更长的表达式解决的,根据您的regexp背景
  • ,它或多或少是可读性的--原始方法的语法稍微短一些(没有涵盖角的情况):

fileName.split('.').init :+ "js" mkString "."

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-01-19 02:39:38

恐怕你实际上得花更长的时间去做可能是最明智、最有力的事情:

代码语言:javascript
运行
复制
scala> "oops".split('.').init ++ Seq("js") mkString "."  
res0: String = js

有点出乎意料的失去你的文件的名称(至少如果你是一个最终用户)!

让我们试试regex:

代码语言:javascript
运行
复制
scala> "oops".replaceAll("\\.[^.]*$", ".js")
res1: java.lang.String = oops

没有丢失文件名,但也没有扩展名。Ack。

让我们修复它:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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

(请注意角落中文件名以句点结尾的不同行为。)

票数 11
EN

Stack Overflow用户

发布于 2011-01-19 01:55:23

一个简单的正则表达式替换会起作用吗?

比如:

代码语言:javascript
运行
复制
scala> "package.file.java".replaceAll("(\\.[^\\.]*$)", ".rb") 
scala> "package.file.rb"
票数 3
EN

Stack Overflow用户

发布于 2011-01-19 07:39:57

lastIndexOf怎么了?

代码语言:javascript
运行
复制
fileName.take(1 + fileName.lastIndexOf(".")) + "js"

当然,如果您想在不包含任何点的情况下保留fileName,则需要做更多的工作

代码语言:javascript
运行
复制
(if (fileName.contains('.')) fileName.take(fileName.lastIndexOf(".")) 
else fileName) + ".js"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4730866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档