2011-09-24 18 views
12

otrzymał nazwę pliku jak:usunąć rozszerzenie pliku

package.zip image.jpeg video.avi etc 

Chciałbym usunąć rozszerzenia, jeżeli istnieje. Jak mogę to zrobić w Javie? Dzięki!

Odpowiedz

27

Coś czeku

if (name.indexOf(".") > 0) 
    name = name.substring(0, name.lastIndexOf(".")); 

indeks unika obracając ukryte pliki jak „.profile” do „”, a lastIndexOf() dba o nazwach jak cute.kitty.jpg.

+4

jednak będzie to również [trzymać] (http://ideone.com/NS2iH) '.kitty.jpg', bez usuwania' .jpg'. To może, ale nie musi być pożądane. –

+0

Możesz zrobić "name.lastIndexOf (". ")> 0' zamiast" name.indexOf (".")> 0' i usunie '.jpg' z' .kitty.jpg' zachowując je jako '.kitty' –

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

Czy sprawdzić, czy nazwa pliku ma . przed wywołaniem substring().

2
String name = filename.lastIndexOf('.') > filename.lastIndexOf(File.separatorChar) ? 
    filename.substring(0, filename.lastIndexOf('.')) 
    : filename; 

Porównanie sprawdza, że ​​sama nazwa pliku zawiera ., w przeciwnym razie ciąg jest zwracany bez zmian.

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

Oto nieco bardziej wytrzymała wersja:

public static String stripExtension(final String s) 
{ 
    return s != null && s.lastIndexOf(".") > 0 ? s.substring(0, s.lastIndexOf(".")) : s; 
} 

radzi sobie null przypadki, gdzie nie ma nic, że wygląda jak przedłużenie i nie molestować pliki, które zaczynają się ., to obsługuje również .kitty.jpg problem również.

To zajmie się najbardziej ogólnymi przypadkami w kontrolowanym środowisku, jeśli przyrostek nie jest tak naprawdę rozszerzeniem, po prostu czymś oddzielonym od siebie, wtedy trzeba dodać trochę sprawdzenia, aby zobaczyć, czy końcowa część faktycznie jest rozpoznanym przez ciebie rozszerzeniem.

0
Pattern suffix = Pattern.compile("\\.\\p{Alnum}+$"); 
Matcher m = suffix.matcher(filename); 
String clearFilename = m.replaceAll(""); 

Problemem tego rozwiązania jest to, że w zależności od wymagań, należy przedłużyć go wspierać w składzie rozszerzeń, jak nazwa_pliku.tar.gz, filename.tar.bz2

[] 's

i przeszłość

+0

Pamiętaj, że jeśli chcesz często stosować tę funkcję, lepiej użyć skompilowanego regex (Pattern.compile). Jeśli użyjesz String.replace i pozycjonowania, będzie przetwarzane każde wykonanie i zużywa więcej czasu procesora. – apast

+1

Przyszedłem tutaj, szukając odpowiedzi takiej jak ta, ale tak jak wolę regex's dla czytelności 'pathsubstring (0, path.lastIndexOf ('.'))' Okazuje się być o rzędy wielkości szybsze niż 'pattern.matcher (ścieżka) .replaceFirst ("") ', nawet z prekompilowanym wzorcem. – MithrilTuxedo

Powiązane problemy