web-dev-qa-db-ja.com

コンソールで行の先頭に戻るにはどうすればよいですか?

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

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

カーソルISが行の先頭に移動しているようです。何も上書きしていないので、既にあるテキストは消えません。行を空白にするためにスペースを出力できます次に、別の\ 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秒遅れて、「古いライン」が「新しいライン」に変わります。

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

また、「\ b」エスケープシーケンスは、行頭ではなく1スペース分バックアップします。したがって、最後の2文字だけを消去したい場合は、次のように書くことができます。

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

「楽しみ」を得る。

37
mtruesdell

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

7
izb

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

System.out.println(mystuff);

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

Java cursesライブラリの実装-- JavaCurses など)を使用すると幸運になるかもしれません。

3
Avi