28

行の先頭に戻って、コンソールに既に出力されているものを上書きするにはどうすればよいですか? 以下は機能していないようです。

System.out.print(mystuff+'\r');
4

3 に答える 3

38

カーソルが行の先頭に移動していると思われます。何も上書きしていないため、既にあるテキストが消えているわけではありません。スペースを出力して行を空白にし、別の \r を追加することができます。

Windows XP と AIX で次のことをテストしたところ、期待どおりに動作しました。

public class Foo {
  public static void main(String[] args) throws Exception {
   System.out.print("old line");
   Thread.sleep(3000);
   System.out.print("\rnew");
  }
}

「古い行」が印刷され、3秒遅れて、「古い行」が「新しい行」に変わります

行全体を消去したい場合は、末尾をスペースで上書きする必要があることを示すために、意図的に最初の行を 2 番目の行よりも長くしました。

また、「\b」エスケープ シーケンスは、行頭ではなく 1 スペース戻ることに注意してください。したがって、最後の 2 文字だけを消去したい場合は、次のように記述できます。

System.out.println("foo\b\bun")

そして「楽しい」を得る。

于 2008-11-19T14:39:09.033 に答える
7

私の推測では (これは推測です)、'\r' は機能しますが、使用しているコンソールでは期待どおりに処理されません。どのコンソールを使用していますか? IDE のコンソール出力のようなものであれば、代わりに実際のコマンドラインで試しましたか?

于 2008-11-19T12:45:19.120 に答える
3

コンソールに新しい行を書きたいだけの場合は、println() メソッドを使用する必要があります。

System.out.println(mystuff);

ただし、これはすでに回線上にあるものを削除しません。実際、System.out は OutputStream の一種である PrintStream であるため、端末固有の方法を見つけることはできますが、基本的には困難です。

JavaCursesなどの curses ライブラリの Java 実装を使用すると、うまくいくかもしれません。

于 2008-11-19T12:41:04.887 に答える