Более простой способ проверить, начинается ли строка с ди git в Rust? - PullRequest
0 голосов
/ 23 апреля 2020

Что я сейчас использую, это

fn main() {
    let a = "abc123";
    let b = "1a2b3c";

    println!("{}", a[0..1].chars().all(char::is_numeric));
    println!("{}", b[0..1].chars().all(char::is_numeric));
}

Есть ли более идиоматический c и / или более простой способ сделать это?

Примечание: строка гарантированно будет не пустой и состоит из символов ASCII.

1 Ответ

3 голосов
/ 23 апреля 2020

Если вы уверены, что он не пустой и сделан из ascii, вы можете работать непосредственно с байтами (u8):

a.as_bytes()[0].is_ascii_digit()

или

(b'0'..=b'9').contains(&a.as_bytes()[0])

Более общие настройки (и, на мой взгляд , больше идиоматических c):

a.chars().next().unwrap().is_numeric()

Причина, по которой все это выглядит немного громоздкой, заключается в том, что некоторые вещи могут идти не так ( которые легко упускаются из виду на других языках):

  • строка может быть пустой => приводит нас к Option / unwrap -land
  • строки в ржавчине UTF-8 ( что в основном затрудняет произвольный доступ к строке; обратите внимание, что ржавчина не только считает 0-9 цифрой c, как показано здесь )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...