我希望将表示特殊非打印字符的双字符串,如"\t"、"\n"、"\a"、...转换成它们的单字符表示.有没有什么通用的方法来做到这一点(对于General,我是指将每个字符串显式转换 for each 字符的替代方法)?

理想行为(我的字符串是从文件中读取的.这只是一个例子):

String str = "\\t";
char c = toChar(str); // c now represents the tab character '\t'

推荐答案

TL;DR

在Java 15+中:

    ( "\\" + "t" ).translateEscapes()  -->  TAB character
    ( "\\" + "n" ).translateEscapes()  -->  LINE FEED character
    ( "\\" + "s" ).translateEscapes()  -->  SPACE character
    …

字符串#ansateEscapes

在Java 15+中,使用字符串#ansateEscapes方法.

从Java 2开始,char类型基本上被打破了,而从Java 5开始,char类型就被打破了.养成使用code point个整数和String个对象的习惯.

final String input = "\\" + "t";
final String TAB = input.translateEscapes ( );

转储到控制台.使用代码点判断每个字符串的实际内容.

System.out.println ( "input = " + input );
System.out.println ( "input code points = " + Arrays.toString ( input.codePoints ( ).toArray ( ) ) );
System.out.println ( "TAB code points = " + Arrays.toString ( TAB.codePoints ( ).toArray ( ) ) );

运行时,我们验证是否确实以两个字符的字符串、一个反斜杠和一个"t"开始.调用之后,我们将该输入转换为代码位为9的单个TAB字符.

input = \t
input code points = [92, 116]
TAB code points = [9]

Java相关问答推荐

如何在Spring Boot中创建500错误的响应正文?

Java中不同包中的类之间的配置共享

Spring boot:Bean和动态扩展器

Springdoc Whitelabel Error Page with Spring V3

JUnit—如何模拟局部变量对象方法调用

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

通过合并Akka Streams中的多个慢源保持订购

Spring Boot Maven包

Jolt变换JSON数组问题

WebSockets和Spring Boot安全性出现错误401

在Java中将int[]矩阵添加到ArrayList中,但出现错误

为什么StandardOpenOption.CREATE不能通过Ubuntu在中小企业上运行?

Java集合:NPE,即使没有添加空值

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

HBox内部的左对齐按钮(如果重要的话,在页码内)

由于可为null,无法在kotlin中实现java接口

如何判断元素计数并在流的中间抛出异常?

如何从指定某些字段的父对象创建子对象

Xml Reader 将 BMP 外部的字符解析为代理项对,这会导致无效的 xml

JAVA 正则表达式识别字符串string或字符串内的字符char