2012-03-01 26 views
17

नियमित अभिव्यक्ति का उपयोग करके स्ट्रिंग में अंतिम कॉमा के बाद सामग्री कैसे प्राप्त करूं?जावा में आखिरी कॉमा के बाद स्ट्रिंग कैसे प्राप्त करें?

उदाहरण:

abcd,fg;ijkl, cas 

उत्पादन होना चाहिए cas


नोट: पिछले अल्पविराम और 'c' चरित्र जो भी निकालने की आवश्यकता के बीच एक रिक्ति नहीं है। इसके अलावा पैटर्न में अंतिम अल्पविराम के बाद केवल एक स्थान होता है।

उत्तर

36

का प्रयोग नियमित अभिव्यक्ति:

Pattern p = Pattern.compile(".*,\\s*(.*)"); 
Matcher m = p.matcher("abcd,fg;ijkl, cas"); 

if (m.find()) 
    System.out.println(m.group(1)); 

आउटपुट:

cas 

या आप उपयोग कर सकते हैं सरल String तरीके:

  1. System.out.println(s.substring(s.lastIndexOf(",") + 1).trim());
  2. System.out.println(s.substring(s.lastIndexOf(", ") + 2));
+0

यह सही है, लेकिन यह regex का उपयोग नहीं करता है। –

+0

नियमित अभिव्यक्ति उदाहरण जोड़ा गया! – dacwe

+0

@ डेकवे: आखिरी अनुक्रमणिका की तरह, पहली अनुक्रमणिका कैसे प्राप्त करें ?? – Deepzz

9

शायद की तरह कुछ:

String s = "abcd,fg;ijkl, cas"; 
String result = s.substring(s.lastIndexOf(',') + 1).trim(); 

है कि, मैं-स्ट्रिंग पिछले अल्पविराम के बाद होने वाली लेने के लिए और सफेद स्थान बाद में आसपास के हटाने ...

+2

अपने मामले को याद रखें! subString – spassvogel

1

आप इस कोशिश कर सकते:

public static void main(String[] args) { 
    String s = " abcd,fg;ijkl, cas"; 
    String[] words = s.split(","); 
    System.out.println(words[words.length-1].trim()); 
} 
+0

के बजाय substring इस सरल खोज के लिए 'split' का उपयोग इष्टतम नहीं है। आप 'lastIndexOf' का उपयोग कर सकते हैं। –

1

केवल एक स्थान:

String[] aux = theInputString.split(",\\s"); 
string result = aux[aux.length-1]; 

0 एन करने के लिए रिक्त स्थान:

String[] aux = theInputString.split(",\\s*"); 
string result = aux[aux.length-1]; 
0

क्या निम्नलिखित के बारे में:

String a = "abcd,fg;ijkl, cas"; 
String[] result = a.split(",[ ]*"); 
String expectedResult = result[result.length - 1]); 
+0

मुझे नहीं पता कि आपको अपना ज्ञान कहां मिला, लेकिन जावा डॉक्स (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#split%28java पर आधारित) पर आधारित है। lang.String% 2 9) और मेरे यूनिट टेस्ट के आधार पर यह नियमित अभिव्यक्तियों का उपयोग करता है! – khmarbaise

0

और एक और :)

String s = "abcd,fg;ijkl, cas"; 
String result = s.replaceAll(".*, ", ""); 
2

आप हमेशा हमेशा अपाचे कॉमन्स में सवाल इस तरह की ... और बुनियादी लोगों के लिए उत्तर के लिए देखो हर निर्माण के साथ शामिल किया जाना चाहिए चाहिए। सबसे उपयुक्त (regexes का उपयोग नहीं) यह है:

StringUtils.substringAfterLast(String str, String separator) 

लेकिन क्या तुम सच में किसी कारण से एक regex उपयोग करना चाहते हैं तरीकों जो आप उपयोग करना चाहते हो सकता है, उदाहरण के लिए के एक जोड़े देखते हैं

String removeAll(String text, String regex) 

या

String removeFirst(String text, String regex) 

Amusingly, तुम क्या आप ऐसा करने (लालची परिमाणकों पर निर्भर) द्वारा चाहते हैं प्राप्त कर सकते हैं:

StringUtils.removeFirst(myString, ".*,"); 

StringUtils Apache Commons-lang3 का हिस्सा है।

किसी और चीज के अलावा पहिया का फिर से आविष्कार करने का कोई मतलब नहीं है। लेकिन मैं कम से कम 2 अन्य लाभ के बारे में सोच सकते हैं:

  1. अपाचे लोगों को भी पर गिना जा सकता है पिछले कुछ वर्षों में सबसे "gotchas" प्रत्याशित की है। यह आपको, um, दिलचस्प सामग्री के साथ आगे बढ़ने के लिए छोड़ देता है।
  2. इन अपाचे विधियों का आमतौर पर नाम दिया जाता है: आप को स्टूपिड उपयोगिता विधियों के साथ अपने कोड को अव्यवस्थित करने की आवश्यकता नहीं है; बजाय आप एक अच्छा साफ विधि है जो क्या करता है यह टिन पर कहते हैं ...

पुनश्च आप क्या विधि वास्तव में करता है के बारे में जांच करने के लिए स्रोत कोड देख रोकने के लिए कुछ नहीं है है। आमतौर पर उन्हें समझना बहुत आसान होता है।

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