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
相关产品推荐
相关产品推荐

