java多了看不见的字符。估计99%的人都不知道。
本帖最后由 parcool 于 2013-03-24 13:37:01 编辑
public class Test {
public static void main(String args[]){
String str = "?abc";
System.out.println(str.substring(0,1));
}
}
照理说,输出结果应该是a,但程序输出结果却是空的。
仔细用键盘移动字符串前面的a,发现"abc" a到"之间还有一个看不见的字符。
不信的复制我代码!!!!!
敢问谁知道如何检测出这个a前面看不见的字符?
java
------解决方案--------------------老帖子了
tochararray
------解决方案--------------------基本上是一些小于 0x20 的控制字符
------解决方案--------------------这个奇怪的 character 是 0xFEFF.
出现在一个Unicode文件的开头,就是 BOM(Byte Order Mark)
同时,在Unicode中它又是 Zero-width no-break space (ZWNBSP)
Zero-width 意味着它在表示时,没有width,所以你在一个Unicode应用中看不见它,反而,在非Unicode应用中能看到它,多表示为“?”
如何检测?
简单地检查 str.charAt(i) == 0xFEFF 就可以了,代码如下:
public static void detectBOM(String s) {
for (int i=0,l=s.length(); i<l; i++) {
if ( s.charAt(i) == 0xFEFF ) {
System.out.println("Warning: BOM is detected at " + i + "-th character");
}
}
}