Java 有没有办法在控制台中打印出用户可以编辑的字符串?

Java 有没有办法在控制台中打印出用户可以编辑的字符串?,java,string,console,Java,String,Console,我的问题是关于Java的 当使用扫描仪时,是否有办法在控制台中打印出字符串,以便用户可以编辑和/或添加更多内容 例如 String aString = "Hello!" System.out.println("Write some text, please."); aString = scanner.nextLine(); 现在我想要一个系统,不受约束但可以编辑。我希望用户能够简单地编辑aString。当用户完成编辑后,扫描仪将再次将所有内容保存到aString 我现在的解决方案是让用户输入一

我的问题是关于Java的

当使用扫描仪时,是否有办法在控制台中打印出字符串,以便用户可以编辑和/或添加更多内容

例如

String aString = "Hello!"
System.out.println("Write some text, please.");
aString = scanner.nextLine();
现在我想要一个系统,不受约束但可以编辑。我希望用户能够简单地编辑aString。当用户完成编辑后,扫描仪将再次将所有内容保存到aString

我现在的解决方案是让用户输入一些新文本,然后使用以下命令将其添加到字符串末尾:

    aString += scanner.nextLine();

谢谢你的帮助。谢谢。

您可以通过Robot课程实现自己的目标。例如,请尝试以下操作:

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.Scanner;

public class RobotText {

    static private Robot robot;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter some text, blank line to end.");
        int count = 1;
        while (true) {
            System.out.print("?>");
            insert("Line " + count);
            count++;
            String line = input.nextLine();
            if (line.length() == 0) break;
            System.out.println("You entered '" + line + "'");
        }
        System.out.println("That's all folks!");
        input.close();
    }

    private static void insert(String text) {
        if (robot == null) {
            // Lazily initialise the robot
            try {
                robot = new Robot();
                robot.setAutoDelay(5);
                robot.setAutoWaitForIdle(true);
            } catch (AWTException e) {
                e.printStackTrace();
            }
        }
        char[] chars = text.toCharArray();
        for (char c : chars) {
            int code = KeyEvent.getExtendedKeyCodeForChar(c);
            robot.keyPress(code);
            robot.keyRelease(code);
        }
    }
}
这将在使用扫描仪读取结果行之前,插入您希望用户以击键方式编辑的文本。注意-不要插入换行符,否则用户将永远没有机会键入

不幸的是,运行应用程序所使用的shell提供的任何行编辑功能都会影响您。在我的例子中,这意味着用户所能做的就是在重新键入替换内容之前,根据需要对预先输入的文本进行退格

为了避免这种情况,你需要用更复杂的东西来代替扫描仪的使用。我还没试过,但它看起来可以满足你的需要

对于极端的过度杀伤力,在GUI可以运行的环境中,或者如果由于某种原因无法将新JAR添加到类路径中,您也可以使用JOptionPane进行输入:

    ...
    while (true) {
        String line = JOptionPane.showInputDialog("Enter some text","Line "+count);
        count++;
        if (line == null || line.length() == 0) break;
        System.out.println("You entered '" + line + "'");
    }
    ...
这确实会为每一行输入启动一个新的Swing事件线程,然后再将其关闭,所以它实际上是在使用加农炮杀死一只苍蝇!但当然,它会在控制台的单独窗口中请求输入,这可能会偏离您的目标太远

最终的答案是为您的应用程序提供一个图形界面,因为我见过的每个工具箱提供的每个文本输入小部件都允许您使用用户随后可以编辑的文本对小部件进行预初始化。我将把工具箱的选择和实现作为练习留给读者。:)