如图出现了一个看不见的字符,看见的只有“123”,长度应该是3,但实际有个看不见的字符,长度变成了4,请问看不见的字符如何出现的? 遇到过没?
看不的字符 : String str="123"; 可复制测试
System.out.println(str.length());
char[] a = str.toCharArray();
for(int i=0;i<str.length();i++){
System.out.println(Integer.toHexString(a[i])+ " ");
}
得到:
202d
31
32
33
是十进制转16进制的主,通过16进制的进制差Unicode的对照表:
是一个特殊的符号。
应该是'\0'吧,你可以把第四字符的ascii码输出看看
println会输出换行符 \r\n
你可以用print就没有了
感觉很神奇就测试了一下,手动敲了一遍代码。是正常的长度3。所以就复制了你下面的String str="123"; 这个进行测试,果然是4,好奇看了一下你的1前面,你的1前面有个类似空格的东西,你可以用方向键往前可以发现1前面有个空的东西。不是空格,比空格空隙小。不知道你怎么打出来来的
我的ide提示1是GBK编码,无法显示中间的字符
其实理论上说字符串中的第一个字符都是一个char,而char在ascii中有256中表示,比如你的str.charAt[1]='1',这是字符如果转成整型的话就是48,这是可见字符,像abc这些都是可见的,如果charAt(0)=0那就肯定看不到,我说的0 只是其中一个例子,经常\r被放到字符串中占了一个位,但怎么都不显示,所以你可以输出charAt(0)的整数形态看看它到底是何方神圣,但不会超过ascii的表示范围,你可以看一下ascii表,0-255都有自己的显示形式,只是有些你看不见
我的结果就和你不一样,本来也想说末尾应该有一个'\0'结尾的,但是因为最近处理字符串比较多,回想一下貌似不是这样,经常使用charAt length都没有发现有你这样的问题,所以也去百度和测试了下,发现末尾以'\0'结尾的是c语言,c是以'\0'来判断字符是否结束,java则不是
public static void main(String[] args) {
String str = "123";
System.out.println(str);
System.out.println(str.length());
System.out.println(str.charAt(0));
System.out.println(str.charAt(1));
}
楼主你好,我这边测试的结果:
目前我感觉你这那边输入的有没有什么特殊字符之类的,使用IDE编辑,没有出现这类问题。建议楼主不需先关注这个,没必要钻进去,等以后有时间了,或者有机会了,再研讨一下。希望对你有帮助。
你的问题出在123的第一个双引号上面,“”这个的第一个字符占位了