2011-09-24 10 views
12

की तरह एक फ़ाइल नाम को देखते हुए की एक्सटेंशन निकाल दें। मैं जावा में इसे कैसे बना सकता हूं? धन्यवाद!एक फ़ाइल

उत्तर

27

कुछ

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

सूचकांक की जांच की तरह "में" ".profile" की तरह छिपी हुई फ़ाइलें मोड़ से बचा जाता है, और lastIndexOf()cute.kitty.jpg जैसे नामों का ख्याल रखता है।

+4

हालांकि, यह भी [रखना] होगा (http://ideone.com/NS2iH) '.kitty.jpg',' .jpg' निकाले बिना। यह वांछित हो सकता है या नहीं भी हो सकता है। –

+0

आप 'name.indexOf ("। ")> 0' के बजाय' name.lastIndexOf ("।")> 0' कर सकते हैं और यह '.kpg.jpg' से' .jpg' को हटाएगा, जबकि इसे '.kitty' –

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

यदि फ़ाइल नाम substring() कॉल करने से पहले एक . है देखने के लिए जाँच करें।

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

तुलना की जाँच करता है फ़ाइल नाम अपने आप में एक . जिसमें, अन्यथा स्ट्रिंग में कोई बदलाव नहीं दिया जाता है।

4

यहाँ एक से थोड़ा अधिक मजबूत संस्करण है:

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

सुन्दरता संभालती null, ऐसे मामलों में जहां कुछ भी नहीं है कि एक विस्तार की तरह दिखता है और फ़ाइलों है कि एक . के साथ शुरू छेड़छाड़ नहीं करता है, यह भी .kitty.jpg संभालती समस्या भी है।

यह प्रत्यय वास्तव में एक विस्तार नहीं है, तो प्रत्यय वास्तव में एक विस्तार नहीं है, तो कुछ . अलग होने के बाद आपको कुछ जांच जोड़ने की आवश्यकता है ताकि पीछे की ओर भाग वास्तव में एक एक्सटेंशन है जिसे आप पहचानते हैं।

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

इस समाधान का समस्या यह है कि, अपनी आवश्यकताओं के आधार पर, आप filename.tar.gz की तरह रचना विस्तार का समर्थन करने के लिए, यह बढ़ाने की जरूरत है, filename.tar.bz2

[] की

और पिछले

+0

याद रखें कि यदि आपको अक्सर इस फ़ंक्शन को लागू करने की आवश्यकता होती है, तो संकलित रेगेक्स (Pattern.compile) का उपयोग करना बेहतर होता है। यदि आप String.replace और positioning का उपयोग करते हैं, तो यह प्रत्येक निष्पादन को संसाधित करेगा और अधिक CPU समय का उपभोग करेगा। – apast

+1

यहां इस तरह के उत्तर की तलाश में आया, लेकिन जितना मैं रीडएक्स को पठनीयता के लिए पसंद करता हूं 'path.substring (0, path.lastIndexOf ('। ')) 'Pattern.matcher की तुलना में तीव्रता के क्रम के रूप में सामने आता है (पथ) .replaceFirst ("") ', यहां तक ​​कि एक precompiled पैटर्न के साथ। – MithrilTuxedo

संबंधित मुद्दे