/**
* Removes the last file extension from a filename or path.
*
* Examples:
* document.pdf -> document
* archive.tar.gz -> archive.tar
* photo.jpg -> photo
* README -> README
* /tmp/file.txt -> /tmp/file
* .gitignore -> .gitignore
*
* @param path The filename or full path.
* @return The filename/path without its last extension.
* @throws IllegalArgumentException if the path is blank.
*/
fun removeFileExtension(path: String): String {
require(path.isNotBlank()) {
"Path cannot be blank."
}
// Find the last path separator.
val lastSeparator = maxOf(
path.lastIndexOf('/'),
path.lastIndexOf('\\')
)
// Find the last dot.
val lastDot = path.lastIndexOf('.')
// No extension found.
if (lastDot == -1) {
return path
}
// Handle hidden files such as ".gitignore".
if (lastDot <= lastSeparator + 1) {
return path
}
// Return everything before the extension.
return path.substring(0, lastDot)
}
fun main() {
println(removeFileExtension("report.pdf")) // report
println(removeFileExtension("archive.tar.gz")) // archive.tar
println(removeFileExtension(".gitignore")) // .gitignore
println(removeFileExtension("README")) // README
println(removeFileExtension("C:\\Temp\\a.txt")) // C:\Temp\a
println(removeFileExtension("/tmp/file.txt")) // /tmp/file
}
/*
run:
report
archive.tar
.gitignore
README
C:\Temp\a
/tmp/file
*/