我正在测试某些内容并调用StringTokenizer
并且正在进行一些奇怪的转换...忘记我应该在\
中划分"\7767546"
但我是只是好奇了\11
到java中的\77
这是我的代码:
String path = "C:\\temp\\\\7800000\7767546.pdf";
String delimeter = "\\";
String[] values = new String[3];
int counter = 0;
StringTokenizer st = new StringTokenizer(path,delimeter);
while(st.hasMoreTokens()){
values[counter] = st.nextToken();
System.out.println(" values[counter]" + values[counter]);
++counter;
}
这是输出:
values[counter]C:
values[counter]temp
values[counter]7800000?67546.pdf
如果您注意到,我原始字符串中的\77
变为?
.....就像unicode一样?
答案 0 :(得分:7)
ASCII中的“77”是“?”。看来Java自动将int转换为char。
这是一个可能适合您的一般修复。它适用于许多不同的情况和许多不同的编程语言。您可以在77之前添加另一个“\”。最有可能的是,当Java处理代码时,双反斜杠将转换为单个反斜杠。
答案 1 :(得分:7)
正如Java语言规范所述
OctalEscape:
\ OctalDigit
\ OctalDigit OctalDigit
\ ZeroToThree OctalDigit OctalDigit
OctalDigit: one of
0 1 2 3 4 5 6 7
ZeroToThree: one of
0 1 2 3
the following String
or character literal is an octal escape
\77
在八进制中,值77
为63
,即?
个字符。
请注意,这与StringTokenizer
无关。它适用于您的String
文字
"C:\\temp\\\\7800000\7767546.pdf"
如果您打印出来,将打印为
C:\temp\\7800000?67546.pdf
因为那是存储的值。
答案 2 :(得分:5)
在此字符串文字中:
String path = "C:\\temp\\\\7800000\7767546.pdf";
你忘了逃避最后\
。实际发生的是:根据JLS 3.10.6,\
可以跟随一个,两个或三个八进制数字,如果它后跟三个八进制数字,则第一个必须为0编译器将采用符合规则的最长子字符串。由于\776
不遵循规则(第一个数字大于3),这意味着它将\77
解释为转义序列,其中77被视为八进制数,等于63十进制,这是'?'
的ASCII代码。
答案 3 :(得分:4)
"\77"
是octal escape sequence.它的十进制数63或'?'
字符。
答案 4 :(得分:0)
感谢那些说它的八进制......那确实有意义......
我不知道java自动将这些类型的数字转换为八进制(0 \ 11到0 \ 77),我原本以为它会给我一个编译器错误,因为我没有正确划分我的\ ...我得到了一个编译错误,如果我的\后面的数字是8和9(即:0 \ 88和0 \ 99)
对于那些说我应该添加另一个\的人,我不确定你们是否看到我的免责声明说:"忘记了我应该在" \ 7767546&#中划定\的事实34;但是我只是好奇了什么是#11直到\ 77 in java"但同样感谢您的关注...