我希望将表示特殊非打印字符的双字符串,如"\t"、"\n"、"\a"、...转换成它们的单字符表示.有没有什么通用的方法来做到这一点(对于General,我是指将每个字符串显式转换 for each 字符的替代方法)?
理想行为(我的字符串是从文件中读取的.这只是一个例子):
String str = "\\t";
char c = toChar(str); // c now represents the tab character '\t'
我希望将表示特殊非打印字符的双字符串,如"\t"、"\n"、"\a"、...转换成它们的单字符表示.有没有什么通用的方法来做到这一点(对于General,我是指将每个字符串显式转换 for each 字符的替代方法)?
理想行为(我的字符串是从文件中读取的.这只是一个例子):
String str = "\\t";
char c = toChar(str); // c now represents the tab character '\t'
在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]