用于替换字符串中的文件扩展名的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. 我喜欢什么: >它有效 我不喜欢的: >它没有我希望的那么短 我怎么能写一个更简单/直接的版本? 更新:下面的答案很棒!简而言之: >看起来我上面的原始方法并不差,虽然它没有涵盖一些极端情况,但如果你需要覆盖那些可以修复更长的表达 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 (注意文件名以句点结尾的角点情况的不同行为.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |