2016-01-05 6 views
6

तो मेरे पास स्ट्रिंग है "हैलो वर्ल्ड!" और "!" को प्रतिस्थापित करना चाहते हैं साथ में "?" ताकि नई स्ट्रिंग "हैलो वर्ल्ड?"मैं जंग में idiomatically विशिष्ट वर्णों को कैसे बदलूं?

रूबी हम gsub विधि के साथ आसानी से कर सकते हैं:

"Hello World!".gsub("!", "?") 

कैसे जंग में मुहावरे यह करने के लिए?

उत्तर

9

आप std::str::replace के साथ एक और भीतर एक स्ट्रिंग की सभी घटनाओं की जगह ले सकता है:

let result = str::replace("Hello World!", "!", "?"); 
println!("{}", result); // => "Hello World!" 

अधिक जटिल मामलों के लिए, regex::Regex::replace_allregex से आप का उपयोग कर सकते हैं:

use regex::Regex; 
let re = Regex::new(r"[A-Za-z]").unwrap(); 
let result = re.replace_all("Hello World!", "x"); 
println!("{}", result); // => "xxxxx xxxxx!" 
+5

ध्यान दें कि आप 'प्रतिस्थापन' को '& str' पर विधि के रूप में भी कॉल कर सकते हैं, जैसे: 'परिणाम = "हैलो वर्ल्ड!"। ("!", "?"); '। – Dogbert

+1

कृपया ध्यान दें: यह एक लूप में एक ही नियमित अभिव्यक्ति को संकलित करने के लिए एक विरोधी पैटर्न है क्योंकि संकलन आम तौर पर महंगा होता है। क्रेट विवरण में विवरण देखें। –

7

इसके अलावा, आप iterators और match उपयोग कर सकते हैं अभिव्यक्ति:

let s:String = "Hello, world!".chars() 
    .map(|x| match x { 
     '!' => '?', 
     'A'...'Z' => 'X', 
     'a'...'z' => 'x', 
     _ => x} 
    ).collect(); 
println!("{}", s);// Xxxxx, xxxxx? 
संबंधित मुद्दे