Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

40,393 questions

52,502 answers

573 users

How to split a string on multiple multi‑character delimiters (and keep them) in Rust

1 Answer

0 votes
fn split_and_keep(text: &str, delims: &[char]) -> Vec<String> {
    if text.is_empty() {
        return Vec::new();
    }

    let delim_set: std::collections::HashSet<char> =
        delims.iter().cloned().collect();

    let chars: Vec<char> = text.chars().collect();
    let mut result = Vec::new();
    let mut start = 0;

    for i in 1..chars.len() {
        let prev = chars[i - 1];
        let curr = chars[i];

        let prev_is_delim = delim_set.contains(&prev);
        let curr_is_delim = delim_set.contains(&curr);

        let should_split =
            (prev_is_delim != curr_is_delim) ||          // text ↔ delim
            (prev_is_delim && curr_is_delim && prev != curr); // delim type changed

        if should_split {
            let segment: String = chars[start..i].iter().collect();
            result.push(segment);
            start = i;
        }
    }

    // Add final segment
    let segment: String = chars[start..].iter().collect();
    result.push(segment);

    result
}

fn main() {
    let s = "aa==bbb---cccc++++ddddd";
    let delims = ['=', '-', '+'];

    let parts = split_and_keep(s, &delims);

    for p in parts {
        print!("[{}] ", p);
    }
}




/*
run:

[aa] [==] [bbb] [---] [cccc] [++++] [ddddd] 

*/

 



answered Mar 10 by avibootz

Related questions

...