How to remove file extension in Kotlin

3 Answers

0 votes
/**
 * 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
 
*/

 



answered Oct 13 by avibootz
edited Oct 13 by avibootz
0 votes
import java.io.File

/**
 * Returns the filename without its last extension.
 */
fun removeFileExtension(fileName: String): String {
    return File(fileName).nameWithoutExtension
}

fun main() {
    println(removeFileExtension("document.pdf"))
    println(removeFileExtension("archive.tar.gz"))
    println(removeFileExtension("/tmp/file.txt"))
    println(removeFileExtension(".gitignore"))
    println(removeFileExtension("README"))
}



/*
run:

document
archive.tar
file

README

*/

 



answered Oct 13 by avibootz
0 votes
/**
 * Removes the last file extension from a path.
 */
fun String.removeFileExtension(): String {
    val lastSeparator = maxOf(
        lastIndexOf('/'),
        lastIndexOf('\\')
    )

    val lastDot = lastIndexOf('.')

    if (lastDot == -1 || lastDot <= lastSeparator + 1) {
        return this
    }

    return substring(0, lastDot)
}

fun main() {
    val fileName = "archive.tar.gz"
  
    println(fileName.removeFileExtension())
}


/*
run:

archive.tar

*/

 



answered Oct 13 by avibootz
...