2

以下のコードは、異なるシステムで異なる出力を出力しました。

String s = "hello?vsrd".replace('?', '\0');
System.out.println(s);

私のシステム(Linux Ubuntu、Netbeans 7.1)で試したところ、次のように出力されました:

ここに画像の説明を入力

別のシステム( Linux Mint、Netbeans 7.1)で 同じコードを試したところ、次のように出力されましたここに画像の説明を入力

\0Javaの文字として機能することを理解しています(この回答を参照し、明らかにs.length()が10を出力することにより)。また、印刷できない文字は、このように印刷される場合があります (ボックス)。しかし、なぜこれは一部のシステムでのみ動作するのでしょうか? jdkのバージョンやOSの違いですか?代替コードは必要ありませんが、なぜそうなるのかを正確に知りたいです。と考えることができますString s = "hello\0vsrd";

4

2 に答える 2

3

\0印刷できない文字です。

さらに、 では、文字列は長さを明示的に保存しないため、C伝統的に で終了します。\0一部のプログラムは、その文字に達すると印刷を停止するだけです。

Netbeans コンソールはそれを出力しますが、フォントにはグリフがなく、正方形も含まれていない可能性があり、これが異なる動作を説明している可能性があります。

于 2013-02-19T14:02:14.363 に答える
0

私はこれが直接の答えではないことを知っています。しかし、多分もっと役立つことができます。
本当に必要'\0'ですか?

多分あなたは使うことができますreplaceAll()

String s="hello?vsrd".replaceAll("?", "");
于 2013-02-19T14:16:52.387 に答える