加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 08:49:18 所属栏目:安全 来源:网络整理
导读:这是我用split编写的一个版本: fileName.split('.').init ++ Seq("js") mkString "." 这转换为例如foo.bar.coffee进入foo.bar.js. 我喜欢什么: 它有效 它不依赖于indexOf()之类的东西 它感觉功能;) 我不喜欢的: 它没有我希望的那么短 它可能会让一些读者
这是我用split编写的一个版本:

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

这转换为例如foo.bar.coffee进入foo.bar.js.

我喜欢什么:

>它有效
>它不依赖于indexOf()之类的东西
>它感觉功能;)

我不喜欢的:

>它没有我希望的那么短
>它可能会让一些读者感到困惑

我怎么能写一个更简单/直接的版本?

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

>看起来我上面的原始方法并不差,虽然它没有涵盖一些极端情况,但如果你需要覆盖那些可以修复更长的表达
>另一种略短的方法使用正则表达式,根据你的正则表达式背景,它可以或多或少地具有可读性
>原始方法的语法略短(未涵盖的角点案例)如下:

fileName.split(‘.’).init:“js”mkString“.”

解决方法

我担心你实际上必须做更长时间才能做出最明智的事情:

scala> "oops".split('.').init ++ Seq("js") mkString "."  
res0: String = js

有点意外丢失您的文件名称(至少如果您是最终用户)!

我们试试正则表达式:

scala> "oops".replaceAll(".[^.]*$",".js")
res1: java.lang.String = oops

没有丢失文件名,但也没有扩展名.确认.

我们来解决它:

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

或者使用正则表达式:

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

(注意文件名以句点结尾的角点情况的不同行为.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读