簡體   English   中英

檢查字符串是否以 Rust 中的數字開頭的更簡單方法?

[英]Simpler way to check if string start with a digit in Rust?

我目前使用的是這個

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));
}

有沒有更慣用和/或更簡單的方法來做到這一點?

注意:字符串保證為非空且由 ASCII 字符組成。

如果您確定它是非空的並且由 ascii 制成,則可以直接對字節( u8 )進行操作:

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

或者

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

更一般的設置(在我看來,更慣用):

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

這一切看起來有點笨拙的原因是可能有一些事情出錯(在其他語言中很容易被忽略):

  • 字符串可能為空 => 引導我們進入Option / unwrap -land
  • rust 中的字符串是 UTF-8 (這基本上使隨機訪問字符串變得復雜;注意 rust不僅將 0-9 視為數字,如此處所示

從您的原始解決方案開始並parse

fn main() {
    let a = "abc123";
    let b = "1a2b3c";
    
    println!("{:?}", a[0..1].parse::<u8>().is_ok());  // false
    println!("{:?}", b[0..1].parse::<u8>().is_ok());  // true
}

該字符串保證為非空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM