如何将表示特殊非打印字符的双字符字符串转换为对应单字符?
实现转义字符串到对应单字符的通用方案
方案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
相关产品推荐
相关产品推荐

