2013-01-24 15 views
11

से कई वर्ण प्रकारों को हटा रहा है क्या यह स्ट्रिंग से कई वर्ण प्रकारों को हटाने के लिए एक स्वीकार्य दृष्टिकोण है या क्या कोई बेहतर (अधिक कुशल तरीका) है? "ilr".contains(_) सा लगता है एक छोटे से विचार कर यह प्रत्येक और हर किरदार के लिए किया जाएगा धोखा दे की तरह, लेकिन फिर, शायद यह सही तरीका है। क्या ऐसा करने के लिए एक तेज़ या अधिक कुशल तरीका है?स्ट्रिंग

val sentence = "Twinkle twinkle little star, oh I wander what you are" 

val words = sentence.filter(!"ilr".contains(_)) 

// Result: "Twnke twnke tte sta, oh I wande what you ae" 

उत्तर

25

वहाँ कोई महत्वपूर्ण अंतर होगा के बाद से वहाँ केवल 3 अक्षरों को हटाने और फिल्टर करने के लिए कोई इतना बड़ा स्ट्रिंग के लिए है, लेकिन आप इस उद्देश्य के लिए सेट का उपयोग करने पर विचार कर सकते। जैसे

val toRemove = "ilr".toSet 
val words = sentence.filterNot(toRemove) 
25

मैं बस का उपयोग करेंगे जावा के अच्छे पुराने replaceAll (यह एक regexp लेता है):

"Twinkle twinkle little star, oh I wander what you are" replaceAll ("[ilr]", "") 
// res0: String = Twnke twnke tte sta, oh I wande what you ae 

char रों के साथ काम (एक Seq[Char] छानने के रूप में), रेगुलर एक्सप्रेशन का उपयोग किया जाना चाहिए के विपरीत यूनिकोड-सुरक्षित, भले ही आप मूल बहुभाषी विमान के बाहर कोड बिंदुओं के साथ काम कर रहे हों। "There Ain't No Such Thing As Plain Text."

+1

+1 धन्यवाद, मैं भूल कैसे पास जावा है रहते हैं। – Jack

+0

आपके पास "बीएमपी के बाहर" पर एक बिंदु हो सकता है। लेकिन यदि आप परवाह करते हैं, तो आप बेहतर परीक्षण लेते हैं - लगभग * लगभग * बीएमपी-सुरक्षित जावा सॉफ़्टवेयर जैसी कोई चीज़ नहीं है (http://stackoverflow.com/a/2533118/53974)। सौभाग्य से, एसडीके स्पष्ट रूप से एक अपवाद है, यदि आप सही एपीआई का उपयोग करते हैं - और regexps धन्य लोगों में से हैं। http://www.oracle.com/us/technologies/java/supplementary-142654.html – Blaisorblade