जावा: किसी विशेष वर्ण के बाद शुरू होने वाले स्ट्रिंग से एक सबस्ट्रिंग प्राप्त करना


196

मेरे पास एक स्ट्रिंग है:

/abc/def/ghfj.doc

मैं ghfj.docइस से निकलना चाहूंगा , यानी अंतिम के बाद सबस्ट्रिंग /, या पहले /से सही।

किसी कृपया कुछ मदद प्रदान कर सकता है?


39
देखो, मैं प्रश्न पूछने से पहले स्वयं उत्तर की खोज करने का मूल्य समझता हूं, लेकिन इस तथ्य के तथ्य ने इस प्रश्न को मेरी खोज को बहुत आसान बना दिया है .. ठीक वैसा ही जैसा मैं पहली हिट के बाद चाहता था। Javadocs से परामर्श करने की तुलना में जल्दी। यह अच्छा है कि यह सवाल यहाँ है। क्यों घटता है?
एरिक

3
यद्यपि यह आपके मूल प्रश्न से कुछ अलग है: आपके उदाहरण में org.apache.commons.io.FilenameUtils.getBaseName आपके स्वयं के स्ट्रिंग ऑपरेशन करने की तुलना में बहुत अधिक विश्वसनीय है।
Schäfer

4
@ मैं आपकी टिप्पणी से पूरी तरह सहमत हूं क्योंकि यह मेरे सवाल का पहला Google परिणाम था और स्वीकृत उत्तर वही है जिसका मुझे उपयोग करने की आवश्यकता है।
thonnor

जवाबों:



42

के साथ एक बहुत ही सरल कार्यान्वयन String.split():

String path = "/abc/def/ghfj.doc";
// Split path into segments
String segments[] = path.split("/");
// Grab the last segment
String document = segments[segments.length - 1];

1
यदि विभाजक नहीं मिलता है तो यह कोड एक त्रुटि सूचकांक आउट ऑफ बाउंड्स त्रुटि को फेंक देगा।
पैट्रिक पार्कर

36

आपने क्या प्रयास किया है यह बहुत सरल है:

String s = "/abc/def/ghfj.doc";
s.substring(s.lastIndexOf("/") + 1)

24

एक और तरीका है उपयोग करने के लिए है इस

String path = "/abc/def/ghfj.doc"
String fileName = StringUtils.substringAfterLast(path, "/");

यदि आप इस विधि को अशक्त करते हैं तो यह अशक्त हो जाएगा। यदि विभाजक के साथ कोई मेल नहीं है, तो यह खाली स्ट्रिंग लौटेगा।


1
अंत में वास्तव में कुछ काम, इस विधि के बारे में पता नहीं था। मैं सबटाइटल + इंडेक्सोफ़ + 1 - 2 +3 के साथ परेशानी से नफरत करता हूँ। यह बहुत साफ है :)
BAERUS

यदि आप एंड्रॉइड पर इस पद्धति का उपयोग करना चाहते हैं, तो आपको StringUtilsपुस्तकालय आयात करना होगा , यह उत्तर इसे करने के लिए गर्म दिखाता है: stackoverflow.com/a/33935645/2966583
stramin


4

यह फ़ाइल नाम भी प्राप्त कर सकता है

import java.nio.file.Paths;
import java.nio.file.Path;
Path path = Paths.get("/abc/def/ghfj.doc");
System.out.println(path.getFileName().toString());

छपेगा ghfj.doc


2

अमरूद के साथ ऐसा करें:

String id="/abc/def/ghfj.doc";
String valIfSplitIsEmpty="";
return Iterables.getLast(Splitter.on("/").split(id),valIfSplitIsEmpty);

अंततः कॉन्फ़िगर करें Splitterऔर उपयोग करें

Splitter.on("/")
.trimResults()
.omitEmptyStrings()
...

इस लेख में अमरूद फाड़नेवाला और अमरुद Iterables पर इस लेख पर एक नज़र डालें


1

कोटलिन में आप substringAfterLastएक सीमांकक निर्दिष्ट कर उपयोग कर सकते हैं ।

val string = "/abc/def/ghfj.doc"
val result = url.substringAfterLast("/")
println(result)
// It will show ghfj.doc

से दस्तावेज़ :

परिसीमन की अंतिम घटना के बाद एक सबस्ट्रिंग लौटाता है। यदि स्ट्रिंग में सीमांकक नहीं होता है, तो अनुपलब्ध रिटर्न देता हैDelimiterValue जो मूल स्ट्रिंग में चूक करता है।


0

मुझे लगता है कि बेहतर होगा अगर हम सीधे विभाजन फ़ंक्शन का उपयोग करें

String toSplit = "/abc/def/ghfj.doc";

String result[] = toSplit.split("/");

String returnValue = result[result.length - 1]; //equals "ghfj.doc"

यदि विभाजक नहीं मिला तो यह कोड एक त्रुटि देगा।
पैट्रिक पार्कर

@PatrickParker आपने हर जगह टिप्पणी क्यों की है कि यदि विभाजक नहीं मिला तो यह एक त्रुटि देगा। यदि आप इसे ज्ञान के उद्देश्यों से ठीक करने के लिए कर रहे हैं, लेकिन मुझे लगता है कि यह थोड़ा बहुत अधिक हो सकता है ...
गौरव मॉल

@GauravMall मैं लोगों को उनके जवाबों को बेहतर बनाने में मदद कर रहा हूं, बेहतर कोड लिखने के लिए, और जो लोग उन्हें नुकसान से बचने में मदद कर रहे हैं और कोड की समझ बनाने से पहले वे इसे कहीं पेस्ट करते हैं। उत्तर सुधरने के बाद मैं ख़ुशी से अपनी टिप्पणी हटा दूंगा। साथ ही, इसे दो जगहों पर लिखना शायद ही "हर जगह" हो। अंत में, टिप्पणी अनुभाग मेटा चर्चा के लिए नहीं है।
पैट्रिक पार्कर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.