You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中判断字符串是否以某一子串集合元素开头的惯用方法

core::str::starts_with 函数定义

core::str
pub fn starts_with<'a, P>(&'a self, pat: P) -> bool
where
    P: Pattern<'a>,

如果给定模式匹配此字符串切片的前缀,则返回true,否则返回false。
模式可以是&str、[char]、[char]切片,或是用于判断字符是否匹配的函数或闭包。

Rust中判断字符串是否以子串集合任意元素开头的惯用方法

处理单个字符前缀时,我们可以用简洁的写法:

if applesauce.starts_with(['a', 'b', 'c', 'd']) {
    // 仅匹配单个字符时的优雅写法
}

但如果要匹配多字符子串集合,下面这种冗长的写法显然不够优雅:

if applesauce.starts_with("aaa") || applesauce.starts_with("bbb") || applesauce.starts_with("ccc") || applesauce.starts_with("ddd") {
    // 肯定有更优的写法!
}

解决方案

将目标子串集合放到切片中,通过迭代器的any方法简化代码,这是Rust里的惯用写法:

let prefixes = ["aaa", "bbb", "ccc", "ddd"];
if prefixes.iter().any(|&prefix| applesauce.starts_with(prefix)) {
    // 字符串以集合中任意子串开头时执行逻辑
}

说明

  • iter()遍历子串切片中的每个元素
  • any()会依次检查每个子串,只要有一个满足starts_with条件就立即返回true(短路求值,无需遍历全部元素)
  • 写法简洁高效,同时保持了代码可读性

内容的提问来源于stack exchange,提问作者Jack Deeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:12:41