2011-09-24 11 views

Respuesta

27

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.

+4

sin embargo, será también [mantener] (http://ideone.com/NS2iH) '.kitty.jpg', sin quitar el' .jpg'. Esto puede o no ser deseado. –

+0

Puede hacer 'name.lastIndexOf (". ")> 0' en lugar de' name.indexOf (".")> 0' y eliminará '.jpg' de' .kitty.jpg' mientras lo mantiene como '.kitty' –

3
String result = filename.substring(0, filename.lastIndexOf(".")) 

hacer Compruebe para ver si el nombre del archivo tiene un . antes de llamar substring().

2
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.

3
myString = myString.replaceAll("\\.\\w+", ""); 
4

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.

0
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

+0

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

+1

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

Cuestiones relacionadas