我知道如何使用Java通過替換前一行將終端中的輸出包含在一行中。例如:使用Java替換終端中的兩條線
System.out.print("old line");
Thread.sleep(3000);
System.out.print("\rnew line");
但是,如果我有兩行輸出,我想什麼都代替
/* array must have length divisible by 2 */
public void doPrinting(String[] array) {
for(int i = 0; i < array.length/2; i++) {
System.out.println(array[i*2]);
System.out.println(array[i*2+1]);
Thread.sleep(3000);
//I imagine some fancy ascii crypticness shall go here?
}
所以,如果我叫doPrinting(new String[]{"Old1", "Old2", "New1", "New2"})
,這應該是什麼樣子,在蘋果終端:
MyName$ java MyClass
Old1
Old2
,然後暫停3秒鐘,然後像
MyName$ java MyClass
New1
New2
我該怎麼做?我在Mac OS上,並通過終端運行我的Java主要方法。理想的答案是添加代碼來修改上述doPrinting
方法。
UPDATE:從下一個答案之後,我嘗試這樣做:
String ANSI_CSI = "\\x1b[";
String[] array = {"old1","old2","new1","new2"};
System.out.print("\n\n");
for(int i = 0; i < array.length/2; i++) {
System.out.print(ANSI_CSI + "2A"); // Up 2
System.out.print(ANSI_CSI + "K"); // Clear
System.out.println(array[i*2]);
System.out.print(ANSI_CSI + "K"); // Clear
System.out.println(array[i*2+1]);
Thread.sleep(3000);
}
但這只是給了我這個輸出終端
MyName$ MyClass
\x1b[2A\x1b[Kold1
\x1b[Kold2
\x1b[2A\x1b[Knew1
\x1b[Knew2
如果不瞭解您的環境,這很難回答 - 下面的答案假設爲ANSI,但如果您有不同類型的終端/模擬器/膩子安裝,它可能會或可能不會工作。 – KevinDTimm 2013-03-05 21:10:41
@KevinDTimm根據我的經驗,所有的Linux終端和PuTTY都支持ANSI **,而不是'cmd'。 – Riking 2013-03-05 21:13:07
如果用戶正在使用linux或windows - 這不是任何地方 – KevinDTimm 2013-03-05 21:18:57