MST
星途 面试题库

面试题:Rust字符串错误处理之常见错误类型

在Rust中处理字符串时,常见的错误类型有哪些?请至少列举3种,并简要说明如何识别和处理这些错误。
25.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 索引越界错误
    • 识别:当使用charsbytesget方法访问字符串元素时,如果提供的索引超出字符串的有效范围,Rust会抛出IndexOutOfBounds错误。例如,对于字符串s = "hello",尝试访问s.chars().nth(10)就会出现此错误。
    • 处理:在访问字符串元素之前,先检查索引是否在有效范围内。可以使用len方法获取字符串长度,然后在访问前进行条件判断。例如:
let s = "hello";
let index = 10;
if index < s.len() {
    let char_at_index = s.chars().nth(index);
} else {
    println!("Index out of bounds");
}
  1. UTF - 8编码错误
    • 识别:Rust的String类型和&str切片都要求是有效的UTF - 8编码。如果尝试从无效的UTF - 8字节序列创建String&str,会出现错误。例如,let s = String::from_utf8(vec![0xFF]).unwrap();会因为0xFF不是有效的UTF - 8字节而导致from_utf8方法返回Err
    • 处理:在创建字符串时,使用from_utf8_lossy方法替代from_utf8,它会将无效字节转换为\uFFFD(替换字符)来生成一个有效的字符串。或者在读取字节序列时,先验证字节序列是否为有效的UTF - 8编码,例如使用is_utf8方法:
let bytes = vec![0x48, 0x65, 0x6C, 0x6C, 0x6F];// "Hello" 的UTF - 8字节
if bytes.is_utf8() {
    let s = String::from_utf8(bytes).unwrap();
} else {
    println!("Invalid UTF - 8 sequence");
}
  1. 字符串拼接错误
    • 识别:在使用+运算符或format!宏进行字符串拼接时,如果类型不匹配可能会出现错误。例如,let s1 = "hello"; let s2 = 5; let result = s1 + s2;会报错,因为+运算符要求两侧操作数都为&str类型。
    • 处理:确保参与拼接的类型正确。如果要拼接不同类型,如数字和字符串,使用format!宏进行格式化。例如:
let s1 = "hello";
let num = 5;
let result = format!("{}{}", s1, num);
  1. 字符串转换错误
    • 识别:当尝试将字符串转换为其他类型(如数字)时,如果字符串格式不正确会出现错误。例如,let num = "abc".parse::<i32>().unwrap();会因为"abc"不能解析为i32而导致parse方法返回Err
    • 处理:使用parse方法时,使用Result类型来处理可能的错误。例如:
let s = "abc";
match s.parse::<i32>() {
    Ok(num) => println!("Parsed number: {}", num),
    Err(e) => println!("Parse error: {}", e),
}