Преобразовать строку в int в Rust?



Примечание: этот вопрос содержит устаревший код pre-1.0! Однако ответ правильный.



преобразование str до int в ржавчине, я могу сделать это:



let my_int = from_str::<int>(my_str);


единственный способ, которым я знаю, как преобразовать String до int - получить кусочек его, а затем использовать from_str вот так:



let my_int = from_str::<int>(my_string.as_slice());


есть ли способ напрямую преобразовать String до int?

891   4  

4 ответов:

вы можете напрямую конвертировать в int с помощью str::parse::<T>() метод.

let my_string = "27".to_string();  // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<i32>().unwrap();

вы можете либо указать тип для разбора с оператором turbofish (::<>), как показано выше или через явные аннотации типа:

let my_int: i32 = my_string.parse().unwrap();

как уже упоминалось в комментариях, parse() возвращает a Result. Этот результат будет Err если строка не может быть проанализирована как указанный тип (например, строка "peter" не может быть проанализирован как i32).

let my_u8: u8 = "42".parse::<u8>().unwrap();
let my_u32: u32 = "42".parse::<u32>().unwrap();

// or, to be safe, match the `Err`
match "foobar".parse::<i32>() {
  Ok(n) => do_something_with(n),
  Err(e) => weep_and_moan(),
}

parse возвращает a core::result::Result<u32, core::num::ParseIntError> и unwrap "перемещает значение v из опции, если это некоторые(v) [или] паники, если само значение равно None".

parse это общая функция, следовательно, тип в угловых скобках.

С недавней ночной, вы можете сделать это:

let my_int = from_str::<int>(&*my_string);

то, что здесь происходит, это String теперь можно разыменовать в str. Тем не менее, функция хочет &str, Так что нам придется брать опять. Для справки, я считаю, что этот конкретный шаблон (&*) называется "заимствования".

Ну, нет. Почему так должно быть? Просто отбросьте строку, если она вам больше не нужна.

&str полезнее, чем String когда вам нужно только прочитать строку, потому что это лишь взгляд на исходные данные, а не его владелец. Вы можете передать его более легко, чем String, и он копируется, поэтому он не используется вызываемыми методами. В этом отношении он более общий: если у вас есть String, вы можете передать его, где &str ожидается, но если вы есть &str, вы можете передать его только в функции, ожидающие String Если вы делаете новое распределение.

вы можете узнать больше о различиях между этими двумя и когда использовать их в официальное руководство строки.

Comments

    Ничего не найдено.