我有一个方法,最后采用一个字符数组(带一个元素),并返回该字符的强制转换:
char[] first = {'a'};
return (int)first[0];
但是,有时我有两个元素的字符数组,其中第一个始终是“\”(即它是一个“包含”转义字符的字符数组):
char second = {'\\', 'n'};
我想返回(int)'\n'
,但我不知道如何将该数组转换为单个转义字符。我可以检查数组是否长度为1或2,但我真的不想让一个长开关或if / else块来检查每个可能的转义字符。
答案 0 :(得分:1)
如何制作逃脱角色的HashMap与第二个?像:
Map<Character, int> escapeMap = new HashMap<>();
escapeMap.put('n', 10);
然后做出类似的事情:
If (second[0] == '\\') {
return escapeMap.get(second[1]);
}
else
{
return (int)first[0];
}
答案 1 :(得分:0)
您可以使用映射将转义序列映射存储到其对应的字符。如果您假设转义序列始终只是一个代码低于128的字符,则可以将映射简化为如下所示:
char[] escaped = {..., '\n', ...'\t', ...}
字符'\n'
位于数组的(int)'n'
位置。
然后你会找到escaped[(int)second[1]]
的转义字符。如果找到无效的转义序列,您只需要检查数组边界。
答案 2 :(得分:0)
这是一个丑陋的黑客。这对我有用,但似乎不可靠,有缺陷且耗时(因此不要在关键部分使用它)。
char[] second = {'\\','n'};
String s = new String(second);
//write the String to an OutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(baos));
writer.write("key=" + s);
writer.close();
//load the String using Properties
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
Properties prop = new Properties();
prop.load(bais);
baos.close();
bais.close();
//now get the character
char c = prop.getProperty("key").charAt(0);
System.out.println((int)c);
输出:10(这是System.out.println((int)'\n');
的输出)
答案 3 :(得分:0)
打印(int)'a'
时,正在打印UniCode
表中该字符的十进制值。如果a
为93
。 http://unicode-table.com/en/
\n
被识别为(Uni)代码LF
,这意味着换行或换行。在Unicode表中,与十进制数10相同。如果您编写:System.out.println((int)'\n');
同样适用于具有特殊含义的字符\b
,\f
,\r
,\t' ,
\',
\“and \\
编译器并为LF
设置了\n
之类的特殊字符代码。如果您想了解详细信息,请查找它们。
从这个角度来看,最简单的解决方案是:
char[] second = {'\\', 'n'};
if (second.length > 1) {
System.out.println((int)'\n');
} else {
System.out.println(second[0]);
}
仅当\n
是您遇到的唯一escape sequence
时才是。