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

如何在Rust中解析\n转义字符?解决输入输出转义失效问题

解决Rust中输入含转义字符的字符串无法解析为实际换行的问题

当你从标准输入读取字符串时,输入的\n会被当作普通字符序列(反斜杠+字母n)处理,而非Rust字符串字面量里的转义换行符。这是因为read_line仅读取原始输入字节,不会自动解析转义序列。

方案1:简单替换字面量\n

如果只需要处理换行符,可以直接用replace方法将输入中的\\n(输入的反斜杠会被读取为普通字符,因此字符串中存储为两个反斜杠加n)替换为实际换行符\n:

use std::io::{self, Write};

fn main() {
    let mut string = String::new();
    // 处理read_line的返回值,避免忽略错误
    io::stdin().read_line(&mut string).unwrap();
    // 替换字面量\n为实际换行
    let parsed_string = string.replace("\\n", "\n");
    print!("{}", parsed_string);
    io::stdout().flush().unwrap();
}

运行测试:

输入:are you working \n\n ???
输出:

are you working 

 ???

方案2:处理多种转义字符

如果需要支持更多转义字符(比如\t、\\等),可以手动实现一个简单的转义解析函数:

use std::io::{self, Write};

// 解析常见转义字符的函数
fn unescape(s: &str) -> String {
    let mut result = String::new();
    let mut chars = s.chars().peekable();
    
    while let Some(c) = chars.next() {
        if c == '\\' {
            match chars.next() {
                Some('n') => result.push('\n'),
                Some('t') => result.push('\t'),
                Some('\\') => result.push('\\'),
                // 可根据需求添加更多转义字符处理(如\r、\"等)
                Some(other) => {
                    // 无法识别的转义序列,保留原始字符
                    result.push('\\');
                    result.push(other);
                }
                None => result.push('\\'),
            }
        } else {
            result.push(c);
        }
    }
    
    result
}

fn main() {
    let mut string = String::new();
    io::stdin().read_line(&mut string).unwrap();
    let parsed_string = unescape(&string);
    print!("{}", parsed_string);
    io::stdout().flush().unwrap();
}

这个函数可以处理常见的转义字符,遇到无法识别的转义序列时会保留原始输入。

内容的提问来源于stack exchange,提问作者M H Utshow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:35:40