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!
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!
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
.
String result = filename.substring(0, filename.lastIndexOf("."))
Czy sprawdzić, czy nazwa pliku ma .
przed wywołaniem substring()
.
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.
myString = myString.replaceAll("\\.\\w+", "");
Zastosowanie Apache Commons IO, FilenameUtils.getBaseName(String filename)
lub removeExtension(String filename)
, jeśli trzeba ścieżkę zbyt.
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.
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ść
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
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
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. –
Możesz zrobić "name.lastIndexOf (". ")> 0' zamiast" name.indexOf (".")> 0' i usunie '.jpg' z' .kitty.jpg' zachowując je jako '.kitty' –