复制字符串中的特定字符

问题描述 投票:0回答:1

我目前的尝试:

pub async fn sanize_string(input : String) -> String {
     let output = input
        .chars()
        .flat_map(|c| if c == '\'' { iter::repeat(c).take(2); } else { iter::once(c).take(1);  } )
        .collect::<String>();

        return output;
}

目标:示例以

O'Brian
作为输入 ->
O''Brian
作为输出

rust char
1个回答
0
投票

忽略拼写错误。那么主要问题是

iter::once()
iter::repeat()
是两种不同的类型。

在这种情况下,您可以始终使用

iter::repeat()
轻松修复它,即

    .flat_map(|c| {
        let n = if c == '\'' { 2 } else { 1 };
        iter::repeat(c).take(n)
    })

对于更复杂的情况,您可以使用

enum
impl Iterator
。在这些情况下,您也可以只使用
itertools::Either
就是这样。看起来像这样:

    .flat_map(|c| {
        if c == '\'' {
            Either::Left(iter::repeat(c).take(2))
        } else {
            Either::Right(iter::once(c).take(1))
        }
    })
© www.soinside.com 2019 - 2024. All rights reserved.