Java:将控制台光标向上移动一行

Squ*_*ing 7 java windows console

首先让我澄清一下,我是编程新手,希望我使用正确的术语。

我使用该System.out.print("");方法打印到 Windows 控制台: System.out.print("Backspace b"); //Output: Backspace b
因此,光标现在位于 b“后面”,如果我输入,则System.out.print("\b");光标向左移动 1,删除“b”。-->
System.out.print("Backspace b"); //Output: Backspace b System.out.print("\bh"); //Output: Backspace h

现在,如果我输入的System.out.print("\n\bh");输出不是Backspace bh
Backspace b h

我怎样才能让光标“向上”返回一行并到达最右边。某行有一个“减\n”或“非\n”,这样它就读作Backspace bh
Java中有类似的东西吗?

小智 4

没有第三方库这是不可能的。我对此进行了广泛的研究,因为过去一周我一直在开发控制台游戏,据我所知,您可以需要 JNI、JNA、Jansi 或 JLine,而 JLine 则需要 Jansi 或 JNA。我个人推荐JLine,因为所有其他都需要您编写 C 或 C++。

如果你说想要上升这么多行,你可以用 JLine 做这样的事情。

import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.jline.utils.InfoCmp;
import java.io.IOException;

public class CursorStuff
{
    static Terminal terminal;

    public static void main(String[] args) throws IOException
    {
        terminal = TerminalBuilder.terminal();
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
        System.out.println("This line will get overwritten by the terminal path");
        goBackLines(3);
        System.out.println("back 3 overwriting 2");
    }

    public static void goBackLines(int remove)
    {
        for(int i = 0; i < remove; i++)
        {
            terminal.puts(InfoCmp.Capability.cursor_up);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)