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

Rust判断字符串所有字符为大写返回true是否代码写法有误

问题原因

你的代码没有语法错误,返回true是因为现有逻辑和你预期的「所有字符均为大写」的校验目标不匹配:

  • 你先用filter(|x| x.is_alphabetic())筛掉了所有非字母字符,测试值":) ?"里只有标点和空格,没有任何字母,过滤完得到的是空迭代器。
  • Rust 迭代器的all()方法有固定行为:空迭代器调用all()永远返回true,这是逻辑上的空真判定,所以最终结果是true。
调整方案

先明确你实际要的校验规则,再对应改代码:

  • 如果规则是「字符串里的所有字母都是大写即可,非字母的符号、空格、数字不做限制」:你现在的代码是正确的,比如输入"HELLO:)"会返回true,输入"Hello:)"会返回false。
  • 如果规则是「字符串里每一个字符都必须是大写字母,不能出现非字母内容」:现有逻辑不符合要求,要去掉前置的非字母过滤,直接判断所有字符,参考实现:
fn main() {
    let message = ":) ?";
    let is_all_uppercase: bool = message
        .chars()
        .all(|c| c.is_alphabetic() && c.is_uppercase());
    println!("{:?}", is_all_uppercase); // 输入":) ?"时返回false,符合规则预期
}

把你注释掉的遍历打印代码放开就能验证:: ) ?这些字符的is_alphabetic()返回值全是false,都会被过滤逻辑排除,最终参与all()判断的字符数量为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:06:27