Java中从带单引号的字符串提取ASCII字符(含转义字符)问题
解决Java中解析单引号包裹的字符字面量问题
核心思路
先剥离字符串首尾的单引号,再根据剩余内容的长度和格式判断:
- 如果是单个字符,直接返回该字符;
- 如果是以
\开头的双字符序列,匹配对应的转义字符(如\n转成换行符、\t转成制表符)。
代码实现
public static char parseCharLiteral(String input) { // 移除首尾的单引号 String inner = input.substring(1, input.length() - 1); // 处理转义字符情况 if (inner.length() == 2 && inner.charAt(0) == '\\') { char esc = inner.charAt(1); return switch (esc) { case 'n' -> '\n'; case 't' -> '\t'; case 'r' -> '\r'; case 'b' -> '\b'; case 'f' -> '\f'; case '\'' -> '\''; case '\"' -> '\"'; case '\\' -> '\\'; default -> throw new IllegalArgumentException("不支持的转义序列: " + inner); }; } // 处理普通单字符情况 else if (inner.length() == 1) { return inner.charAt(0); } // 非法输入处理 else { throw new IllegalArgumentException("无效的字符字面量: " + input); } }
示例验证
- 输入
'A'→ 返回'A' - 输入
'\n'→ 返回换行符\n - 输入
'\t'→ 返回制表符\t - 输入
'\\'→ 返回反斜杠\
这个方案覆盖了常见的转义字符场景,同时对非法输入抛出明确的异常,方便调试。
内容的提问来源于stack exchange,提问作者Pablo García Marcos
相关产品推荐
相关产品推荐

