Rust中如何合并向量中非单字符数字/字母的字符串?
Rust字符串向量合并方案
问题需求
给定一个Rust字符串向量,需要通用方法将其中不属于单字符数字或单字符字母的字符串进行合并,保留符合要求的单字符元素,合并连续的非符合要求元素。
例如输入:
["1", "1", "1", "M", "foo bar", "1", "1", "2", "M", "foo", "ba", "r", "1", "1", "3", "M", "barfoo", "1", "1", "4", "M", "bar ", "foo"]
处理后输出:
["1", "1", "1", "M", "foo bar", "1", "1", "2", "M", "foobar", "1", "1", "3", "M", "barfoo", "1", "1", "4", "M", "bar foo"]
实现思路
- 定义判断规则:判断字符串是否为单字符数字或单字符字母(区分大小写,若需要不区分可调整逻辑)
- 遍历向量,维护一个临时缓冲区用于存储需要合并的非符合要求元素
- 遇到符合要求的元素时:先将缓冲区内容合并后加入结果(如果缓冲区非空),再将当前符合要求的元素加入结果
- 遍历结束后,检查缓冲区是否还有内容,若有则合并加入结果
代码实现
fn merge_non_single_chars(vec: Vec<&str>) -> Vec<String> { let mut result = Vec::new(); let mut temp = String::new(); for s in vec { // 判断是否为单字符数字或字母 if s.len() == 1 { let c = s.chars().next().unwrap(); if c.is_ascii_alphanumeric() { // 如果临时缓冲区有内容,先合并加入结果 if !temp.is_empty() { result.push(temp); temp = String::new(); } result.push(s.to_string()); continue; } } // 非符合要求的元素,加入临时缓冲区(保留原空格) temp.push_str(s); } // 处理最后剩余的临时内容 if !temp.is_empty() { result.push(temp); } result } fn main() { let input = vec!["1", "1", "1", "M", "foo bar", "1", "1", "2", "M", "foo", "ba", "r", "1", "1", "3", "M", "barfoo", "1", "1", "4", "M", "bar ", "foo"]; let output = merge_non_single_chars(input); println!("{:?}", output); }
代码说明
- 判断逻辑:使用
len() == 1确保是单字符,再通过is_ascii_alphanumeric()判断是否为字母或数字(若需要支持非ASCII字符,可替换为c.is_alphanumeric()) - 合并规则:连续的非符合要求元素会直接拼接(保留原字符串的空格,如示例中的"bar "和"foo"合并为"bar foo")
- 通用性:该逻辑不依赖输入向量的特定结构,只要是字符串向量都能处理
内容的提问来源于stack exchange,提问作者GranBoh
相关产品推荐
相关产品推荐

