2011-10-05 8 views
24

फिलहाल में कई शब्दों की जगह उपयोग करने के लिए मैं कर रहा हूँलिए सबसे कारगर तरीका एक स्ट्रिंग

उदाहरण:

line.replaceAll(",","").replaceAll("cat","dog").replaceAll("football","rugby"); 

मुझे लगता है कि यह बदसूरत लगता है। यह सुनिश्चित करने के लिए एक बेहतर तरीका सुनिश्चित नहीं है? शायद एक हैशप के माध्यम से लूप?

संपादित करें:

दक्षता करके मैं बेहतर कोड शैली और लचीलेपन से है कि वास्तविक की जगह आंतरिक रूप से एक regex मुझे लगता है कि दृष्टिकोण ठीक है में बदल जाती है

+3

रनटाइम दक्षता के बारे में आपका प्रश्न है? लचीलापन?कोड शैली? कृपया स्पष्ट करें। – Mac

+2

यह शुद्धता का सवाल भी हो सकता है, क्योंकि एन पास के दौरान किए गए प्रतिस्थापन एक ही पास के दौरान एन जोड़े के प्रदर्शन प्रतिस्थापन के बराबर नहीं हो सकते हैं। – Xion

+2

अद्यतन प्रश्न लेकिन कोड को बेहतर स्टाइल करने के लिए ढूंढ रहे हैं और लचीलापन – Decrypter

उत्तर

4

अलावा मतलब है। एक गैर-रेगेक्स कार्यान्वयन StringUtils.replace(..) में पाया जा सकता है।

देख रहे हैं कि क्या विकल्प हो सकते हैं, आपको अभी भी तारों के जोड़े की पहचान करने के लिए कुछ चाहिए।

MultiReplaceUtil.replaceAll{line, 
     {",", ""}, {"cat", "dog"}, {"football", "rugby"}}; 

या शायद

MapReplaceUtil(String s, Map<String, String> replacementMap); 

या यहाँ तक कि

ArrayReplaceUtil(String s, String[] target, String[] replacement); 

अभ्यास कोडिंग के मामले में मेरे लिए अधिक सहज ज्ञान युक्त लगता है जिनमें से न: यह की तरह लग सकता है।

20

आप बहुत लचीली खोज-और-प्रतिस्थापन सुविधाओं को बनाने के लिए Matcher.appendReplacement()/appendTail() का उपयोग कर सकते हैं।

JavaDoc में उदाहरण इस प्रकार है:

Pattern p = Pattern.compile("cat"); 
Matcher m = p.matcher("one cat two cats in the yard"); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, "dog"); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

अब, यह while पाश अंदर आप अपने आप को तय कर सकते हैं प्रतिस्थापन पाठ है और आधार वास्तविक सामग्री पर जानकारी का मिलान नहीं हुआ जा रहा है।

उदाहरण के लिए आप ,, catयाfootball से मेल खाते हैं और वास्तविक पाश अंदर वास्तविक मैच के आधार पर प्रतिस्थापन पर फैसला करने के लिए पैटर्न (,|cat|football) इस्तेमाल कर सकते हैं।

आप इस तरह से और अधिक लचीली चीजें बना सकते हैं, जैसे सभी दशमलव संख्याओं को हेक्स संख्याओं या इसी तरह के संचालन के साथ बदलना।

यह नहीं कम के रूप में और सरल अपने कोड के रूप में है, लेकिन आप इसके साथ छोटे और सरल तरीकों का निर्माण कर सकते हैं।

21

यह कार्यक्षमता पहले से ही Commons Lang की StringUtils कक्षा में लागू की गई है।

StringUtils.replaceEach(String text, String[] searchList, String[] replacementList) 
+1

मुझे विश्वास है कि यह मानक पुस्तकालय में नहीं बल्कि अपाचे कॉमन्स [लिंक] में है (https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#replaceEach%28java.lang.String,%20java.lang.String [] ,% 20java.lang.String []% 2 9) – tkokasih

+0

नया संस्करण ['StrSubstitutor'] होगा (https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/ कॉमन्स/टेक्स्ट/StrSubstitutor.html) से [अपाचे कॉमन्स टेक्स्ट] (https://commons.apache.org/proper/commons-text/)। – Andreas

1

स्काला प्रेमियों के लिए:

"cat".r.replaceAllIn("one cat two cats in the yard", m => "dog") 

m तुम भी अपने प्रतिस्थापन parameterize कर सकते हैं।

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