2010-11-04 16 views
7

मैं एक नियमित अभिव्यक्ति का उपयोग कर एक स्ट्रिंग में अंतिम बिंदु को प्रतिस्थापित करने की कोशिश कर रहा हूं।एक नियमित अभिव्यक्ति का उपयोग कर स्ट्रिंग में अंतिम बिंदु को कैसे प्रतिस्थापित करें?

चलो कहते हैं कि मैं निम्नलिखित स्ट्रिंग करते हैं:

String string = "hello.world.how.are.you!"; 

मैं एक विस्मयादिबोधक चिह्न के साथ पिछले डॉट बदलना चाहते हैं ऐसी है कि परिणाम है:

"hello.world.how.are!you!" 

मैं का उपयोग कर विभिन्न भाव की कोशिश की है किसी भी भाग्य के बिना विधि String.replaceAll(String, String)

उत्तर

12

एक तरीका यह होगा:

string = string.replaceAll("^(.*)\\.(.*)$","$1!$2"); 

वैकल्पिक रूप से आप के रूप में नकारात्मक अग्रदर्शी उपयोग कर सकते हैं:

string = string.replaceAll("\\.(?!.*\\.)","!"); 

Regex in Action

+0

धन्यवाद एक बहुत! मैं उस राक्षस के साथ कभी नहीं आया होगा। – digiarnie

+2

तथ्य यह है कि यह एक राक्षस है (आपके शब्द, मेरा नहीं) शायद इसका उपयोग करके _not_ के लिए एक अच्छा तर्क है :-) फिर भी, अगर यह काम करता है, तो इसे स्वीकार किया जाना चाहिए क्योंकि आपने रेगेक्स समाधान के लिए कहा था। – paxdiablo

+0

मैं उससे सहमत हूं। – digiarnie

8

हालांकि आप एक regex का उपयोग कर सकते हैं, यह कभी कभी सबसे अच्छा कदम पीछे करने के लिए और बस इसे पुराने तरीके से करें। मैं हमेशा इस धारणा का रहा हूं कि, यदि आप लगभग दो मिनट में इसे करने के लिए रेगेक्स के बारे में नहीं सोच सकते हैं, तो यह शायद रेगेक्स समाधान के अनुकूल नहीं है।

इसमें कोई संदेह नहीं है कि यहां कुछ अद्भुत रेगेक्स उत्तर प्राप्त करें। उनमें से कुछ एक नया स्ट्रिंग निर्माण करने के लिए :-)

आप lastIndexOf उपयोग कर सकते हैं अंतिम बार होने पाने के लिए और substring पठनीय हो सकता है: यह पूरा कार्यक्रम दिखाता है कि कैसे:

public class testprog { 
    public static String morph (String s) { 
     int pos = s.lastIndexOf("."); 
     if (pos >= 0) 
      return s.substring(0,pos) + "!" + s.substring(pos+1); 
     return s; 
    } 
    public static void main(String args[]) { 
     System.out.println (morph("hello.world.how.are.you!")); 
     System.out.println (morph("no dots in here")); 
     System.out.println (morph(". first")); 
     System.out.println (morph("last .")); 
    } 
} 

उत्पादन होता है:

hello.world.how.are!you! 
no dots in here 
! first 
last ! 
+0

हाँ मेरे पास स्ट्रिंगबिल्डर का उपयोग करके समाधान था और अंतिम बिंदु के सूचकांक के आधार पर प्रतिस्थापित किया गया था। लेकिन यदि संभव हो तो मैं नियमित अभिव्यक्ति का उपयोग करके इसे प्राप्त करना चाहता था। – digiarnie

+0

बस एक एफवाईआई के रूप में, स्ट्रिंगबिल्डर का उपयोग करके मेरा पिछला समाधान इस तरह दिखता था: स्ट्रिंगबिल्डर बिल्डर = नया स्ट्रिंगबिल्डर (स्ट्रिंग); builder.replace (lastDotIndex, lastDotIndex + 1, "!"); स्ट्रिंग newString = builder.toString(); – digiarnie

7

आपको जिस रेगेक्स की आवश्यकता है वह \\.(?=[^.]*$) है। ?= एक अग्रदर्शी अभिकथन

"hello.world.how.are.you!".replace("\\.(?=[^.]*$)", "!") 
1

है इस प्रयास करें:

string = string.replaceAll("[.]$", ""); 
संबंधित मुद्दे