日期:2014-05-20  浏览次数:20548 次

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");
       }
    }
}