2016-05-10 45 views
3
public static void main(String[] args) { 
    char[] array = new char[2]; 
    array[0] = 'a'; 
    String s = new String(array); 
    assert s.length() == 2; 
    System.out.print(">" + s + "<\n"); 
    System.out.print(">" + s.substring(1) + "<\n"); 
    System.out.print("end of test.\n"); 
} 

的输出是:如果Java打印NUL字符会怎么样?

>a 
> 
end of test 

不同于C,在Java字符串不是空字符结束,因此断言是真实的。为什么Java不打印<分隔符号?

编辑:可能相关的是,这是在Eclipse 4.5.1在Ubuntu 14.04。

+3

它为我打印出来。它可能是你的终端导致它吗? – resueman

+0

对我来说很好用 –

+0

对我来说也适用 – mhyst

回答

3

我已经在Eclipse中测试你的代码,一切似乎优秀作品。

但是,如果我复制/粘贴Eclipse控制台输出,并将其粘贴在文本编辑器,你只提了什么>a它粘贴。

我甚至粘贴这个从Eclipse控制台复制/粘贴的>a(当我看到>a < ...看看我的屏幕截图)。

所以,我说这个小代码段代码:

String f = " >" + s + "<\n"; 
for (int i=0; i < f.length(); i++) { 
    System.out.println((int)f.charAt(i)); 
} 

这是ASCII码:

32 
62 
97 
0 
60 
10 

我觉得你的控制台有冲突打印NUL(或0)字符。另外,我在Windows上测试了这个功能,所以Windows的中间有NUL复制/粘贴字符串问题并不会让我感到惊讶。

这是从我的Eclipse和输出截图: enter image description here

+0

有趣的是,不可打印的null占用了控制台上的空白。我不会期待这一点。在我的控制台上,没有空白。 – H2ONaCl

+0

@ H2ONaCl它也引起了我的注意,但最引起我注意的是......将内容复制并粘贴到文本编辑器中。看来剪贴板borked用'NUL'字符 –

+0

路过的时候'NUL'字符的事情,即使这些字符串通常不是以空值终止,因为一切都当了'NUL'丢失后,我已经看到了,有时奇怪的事情发生字符串被转换为C字符串。 – NobodyNada

0
>a < 
    > < 
    end of test 

我不能复制你的输出中 - 这是我得到的BlueJay,Eclipse中,和NetBeans输出。你是否尝试过在不同的IDE中确认每次都发生这种情况?

+0

如果它在命令行上工作,那么我不会担心IDE太多。 – H2ONaCl

+0

@ H2ONaCl好吧。干杯 - 很高兴听到它在那里工作 –

+0

我的命令行打印'> a <'。与你的不完全一样。 – H2ONaCl

相关问题