Как удалить подстроку по индексу из типа Rust String или & str? - PullRequest
0 голосов
/ 21 июня 2020

У меня есть строка типа & str, из которой я хочу удалить подстроку. У меня есть алгоритм для расчета начальной и конечной позиции удаляемой детали. Как мне теперь удалить подстроку?

Чтобы проиллюстрировать это более наглядно, если бы я использовал C ++, я бы сделал это:

#include<iostream>
#include<string>

    int main(){
        std::string foo = "Hello";
        int start = 2,stop = 4;
        std::cout<<foo;
        foo.erase(start, stop - start);
        std::cout<<std::endl<<foo<<std::endl;
    }

Мой код в Rust:

fn main(){
    let mut foo: &str = "hello";
    let start: i32 = 0;
    let stop: i32 = 4;
    //what goes here?
}
     

1 Ответ

0 голосов
/ 21 июня 2020

&str - неизменяемый фрагмент, он чем-то похож на std::string_view, поэтому вы не можете его изменить. Вместо этого вы можете использовать итератор и собрать новый String:

let removed: String = foo
    .chars()
    .take(start)
    .chain(foo.chars().skip(stop))
    .collect();

, иначе можно было бы изменить String на месте:

let mut foo: String = "hello".to_string();

// ...

foo.replace_range((start..stop), "");

Имейте в виду, однако, что последний пример семантически отличается, поскольку он работает с байтовыми индикаторами, а не с символами. Следовательно, при неправильном использовании может возникнуть ошибка c (например, когда смещение start находится в середине многобайтового символа).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...