提问人:136 提问时间:9/1/2023 最后编辑:Basil Bourque136 更新时间:9/1/2023 访问量:100
如何将表示“特殊”字符的字符串转换为其字符表示形式
How to transform strings representing 'special' characters to their character representation
问:
我想转换表示特殊非打印字符的双字符字符串,例如“\t”、“\n”、“\a”,...到他们的单字符表示中。有没有通用的方法可以做到这一点(通用,我的意思是将每个字符串显式翻译成每个字符的替代方法)?
理想行为(我的字符串是从文件中读取的。这只是一个例子):
String str = "\\t";
char c = toChar(str); // c now represents the tab character '\t'
答:
2赞
Diego Borba
9/1/2023
#1
您可以通过以下方式利用 Apache Commons 文本库中的 StringEscapeUtils
类来实现您的目标:
String str = "\\t";
String unescapedStr = StringEscapeUtils.unescapeJava(str);
char c = unescapedStr.charAt(0);
该方法将字符串中的转义序列转换为其对应的字符。在这种情况下,它将转换为制表符。StringEscapeUtils.unescapeJava
\\t
'\t'
请记住将 Apache Commons 文本库包含在项目的依赖项中!
但是,如果由于某种原因您不想/不能使用库,您可以这样做:toChar
public static char toChar(String str) {
switch (str) {
case "\\t":
return '\t';
case "\\b":
return '\b';
case "\\n":
return '\n';
case "\\r":
return '\r';
case "\\f":
return '\f';
case "\\'":
return '\'';
case "\\\"":
return '\"';
case "\\\\":
return '\\';
default:
throw new IllegalArgumentException();
}
}
评论
1赞
136
9/1/2023
StringEscapeUtils.unescapeJava
似乎完成了这项工作!
1赞
Basil Bourque
9/1/2023
无需添加库。此功能现在内置于 Java 中。
1赞
VGR
9/1/2023
#2
String 类本身有一个 translateEscapes 方法,它执行以下操作:
String str = "\\t";
char c = str.translateEscapes().charAt(0);
4赞
Basil Bourque
9/1/2023
#3
tl;博士
在 Java 15+ 中:
( "\\" + "t" ).translateEscapes() --> TAB character
( "\\" + "n" ).translateEscapes() --> LINE FEED character
( "\\" + "s" ).translateEscapes() --> SPACE character
…
String#translateEscapes
在 Java 15+ 中,使用 String#translateEscapes
方法。
自 Java 2 以来,该类型基本上被破坏了,自 Java 5 以来一直存在。养成改用码位整数和对象的习惯。char
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]
上一个:从哈希结果中计算字符数的函数
下一个:C# 字符串转换字符
评论