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

如何将表示特殊非打印字符的双字符字符串转换为对应单字符?

实现转义字符串到对应单字符的通用方案

方案1:借助Apache Commons Text快速实现

如果可以引入第三方依赖,StringEscapeUtils.unescapeJava()是最省心的通用方案,它能自动解析所有Java标准转义序列,直接取处理后的第一个字符即可:

import org.apache.commons.text.StringEscapeUtils;

public char toChar(String str) {
    String unescapedStr = StringEscapeUtils.unescapeJava(str);
    if (unescapedStr.length() != 1) {
        throw new IllegalArgumentException("输入不是有效的单转义字符序列");
    }
    return unescapedStr.charAt(0);
}

// 测试示例
String str = "\\t";
char tabChar = toChar(str); // 得到制表符 '\t'

方案2:手动解析(无外部依赖)

要是不能用第三方库,就手动处理转义映射,覆盖常见的控制字符:

public char toChar(String str) {
    // 先校验输入格式:必须是两个字符,且第一个是反斜杠
    if (str == null || str.length() != 2 || str.charAt(0) != '\\') {
        throw new IllegalArgumentException("输入必须是形如\\x的转义序列");
    }
    
    char escapeCode = str.charAt(1);
    // 匹配所有支持的转义字符
    return switch (escapeCode) {
        case 't' -> '\t';  // 制表符
        case 'n' -> '\n';  // 换行符
        case 'a' -> '\u0007';  // 响铃符
        case 'b' -> '\b';  // 退格符
        case 'f' -> '\f';  // 换页符
        case 'r' -> '\r';  // 回车符
        case '\\' -> '\\'; // 反斜杠本身
        case '\'' -> '\''; // 单引号
        case '"' -> '"';   // 双引号
        default -> throw new IllegalArgumentException("不支持的转义字符: " + escapeCode);
    };
}

// 测试响铃符
String bellStr = "\\a";
char bellChar = toChar(bellStr); // 得到响铃符 '\u0007'

补充说明

  • 方案1的优势是通用,除了常见控制字符,还能处理\\uXXXX这类Unicode转义,不用自己维护映射表,适合大多数场景。
  • 方案2适合不能引入依赖的环境,可根据需求自行扩展switch里的转义字符映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:12:43