Боюсь, вам действительно нужно сделать это длиннее , чтобы сделать то, что, пожалуй, самая разумная и надежная вещь:
scala> "oops".split('.').init ++ Seq("js") mkString "."
res0: String = js
Какая-то неожиданная потеря названия вашего файла (по крайней мере, если вы конечный пользователь)!
Давайте попробуем регулярное выражение:
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
Или с регулярным выражением:
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
(Обратите внимание на различное поведение в угловом случае, когда имя файла заканчивается точками.)