gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:38:53 27 4
gpt4 key购买 nike

这是我使用 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

    (注意文件名以句点结尾的极端情况的不同行为。)

    关于Scala 表达式替换字符串中的文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730866/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com