Dado un nombre de fichero como:Retire la extensión de un archivo
package.zip image.jpeg video.avi etc
me gustaría quitar la extensión, si existe. ¿Cómo puedo hacer esto en Java? ¡Gracias!
Dado un nombre de fichero como:Retire la extensión de un archivo
package.zip image.jpeg video.avi etc
me gustaría quitar la extensión, si existe. ¿Cómo puedo hacer esto en Java? ¡Gracias!
Algo así como cheque
if (name.indexOf(".") > 0)
name = name.substring(0, name.lastIndexOf("."));
El índice evita convertir archivos ocultos como ".profile
" en "", y el lastIndexOf()
se encarga de nombres como cute.kitty.jpg
.
String result = filename.substring(0, filename.lastIndexOf("."))
hacer Compruebe para ver si el nombre del archivo tiene un .
antes de llamar substring()
.
String name = filename.lastIndexOf('.') > filename.lastIndexOf(File.separatorChar) ?
filename.substring(0, filename.lastIndexOf('.'))
: filename;
La comparación comprueba que el nombre del archivo en sí contiene una .
, de lo contrario la cadena se devuelve sin cambios.
myString = myString.replaceAll("\\.\\w+", "");
Uso Apache Commons IO, FilenameUtils.getBaseName(String filename)
o removeExtension(String filename)
, si usted necesita la ruta también.
Aquí es una versión ligeramente más robusto:
public static String stripExtension(final String s)
{
return s != null && s.lastIndexOf(".") > 0 ? s.substring(0, s.lastIndexOf(".")) : s;
}
maneja con gracia null
, los casos donde no hay nada que se parezca a una extensión y no molestar a los archivos que comienzan con un .
, esto también se encarga de la .kitty.jpg
problema también.
Esto manejará la mayoría de los casos generales en un entorno controlado, si el sufijo no es en realidad una extensión, simplemente algo separado .
, entonces necesita agregar alguna comprobación para ver si la parte final realmente es una extensión que reconoce.
Pattern suffix = Pattern.compile("\\.\\p{Alnum}+$");
Matcher m = suffix.matcher(filename);
String clearFilename = m.replaceAll("");
El problema de esta solución es que, dependiendo de sus necesidades, es necesario ampliarlo para soportar extensiones compuestas, como nombredearchivo.tar.gz, filename.tar.bz2
[] 's
y último
Recuerde que si necesita aplicar esta función a menudo, es mejor usar expresiones regulares compiladas (Pattern.compile). Si usa String.replace y posicionamiento, se procesará cada ejecución y consumirá más tiempo de CPU. – apast
Vine aquí en busca de una respuesta como esta, pero tanto como prefiero expresiones regulares para la legibilidad 'path.substring (0, path.lastIndexOf ('.'))' Resulta ser órdenes de magnitud más rápidas que 'pattern.matcher (ruta) .replaceFirst ("") ', incluso con un patrón precompilado. – MithrilTuxedo
sin embargo, será también [mantener] (http://ideone.com/NS2iH) '.kitty.jpg', sin quitar el' .jpg'. Esto puede o no ser deseado. –
Puede hacer 'name.lastIndexOf (". ")> 0' en lugar de' name.indexOf (".")> 0' y eliminará '.jpg' de' .kitty.jpg' mientras lo mantiene como '.kitty' –