避免来自 Java 标准输入流的控制序列(如 ^[[C)
Avoid control sequences(like ^[[C) from Java standard inputstream
代码:
import java.util.Scanner;
public class Try{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.println("Enter a String : ");
String s = sc.nextLine();
System.out.println("The Entered String is : " + s);
System.out.println("The Length of Entered String is : " + s.length());
sc.close();
}
}
输出:
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $java Try
Enter a String :
hello
The Entered String is : hello
The Length of Entered String is : 5
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $java Try
Enter a String :
hello^[[C
The Entered String is : hello
The Length of Entered String is : 8
当我按下箭头键时 ^[[C 出现而不是光标移动(类似的事情发生在其他箭头键、转义键、home、end 上)!
这里发生的是字符串第二次包含字符 :
['h', 'e', 'l', 'l', 'o', '\x1b', '[', 'C']
所以,'\x1b', '[', 'C' 是从键盘发送到 shell 的字符序列,代表右箭头键(光标向前)。
我想要的是,这些字符不会出现在 shell 中,但光标会移动(根据按下的键向前、向后、回到原点、结束等)。
接受输入后的处理意义不大,主要目的是让光标移动!
我如何在 Java 中实现这一点?
[编辑]
唯一的目标是在使用该程序时为用户提供类似终端的体验。
所以我进行了大量的搜索和谷歌搜索,到目前为止我认为不可能直接从 Java.
但是,但是我们可以用 C++ 或 C 来实现这个以及更多。
因此,最好和最优化的解决方案是为此使用 C++ 库。
现在我不太了解任何此类预先存在的库(对于 Java)所以我编写了自己的 C++ 代码并使用 JNI 从 Java 调用它。
如果您认为对于这样一个小问题每次都这样做太复杂了,我已经创建了一个非常简单的 Java 库来完成这一切。
这是 GitHub 页面:https://github.com/Jaysmito101/SeriousConsole
使用起来非常简单
我的代码:
import com.jaysmito.sconsole.SeriousConsole;
import java.nio.file.*;
public class Main{
public static void main(String[] args) throws Exception{
SeriousConsole.initConsole(Path.of("").toAbsolutePath().toString() + "/libseriousconsole.so");
SeriousConsole.print("Enter a String : ");
String s = SeriousConsole.readLine();
System.out.println("The String entered is: " + s);
}
}
编译:
javac -cp SeriousConsole.jar Main.java
致运行:
java -cp .:SeriousConsole.jar Main
您可以从 GitHub link.
下载 jar 和 so 文件
注意:这个库是 java.io.Console
的更好版本
代码:
import java.util.Scanner;
public class Try{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.println("Enter a String : ");
String s = sc.nextLine();
System.out.println("The Entered String is : " + s);
System.out.println("The Length of Entered String is : " + s.length());
sc.close();
}
}
输出:
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $java Try
Enter a String :
hello
The Entered String is : hello
The Length of Entered String is : 5
┌─[jaysmito@parrot]─[~/Desktop]
└──╼ $java Try
Enter a String :
hello^[[C
The Entered String is : hello
The Length of Entered String is : 8
当我按下箭头键时 ^[[C 出现而不是光标移动(类似的事情发生在其他箭头键、转义键、home、end 上)!
这里发生的是字符串第二次包含字符 :
['h', 'e', 'l', 'l', 'o', '\x1b', '[', 'C']
所以,'\x1b', '[', 'C' 是从键盘发送到 shell 的字符序列,代表右箭头键(光标向前)。
我想要的是,这些字符不会出现在 shell 中,但光标会移动(根据按下的键向前、向后、回到原点、结束等)。
接受输入后的处理意义不大,主要目的是让光标移动!
我如何在 Java 中实现这一点?
[编辑]
唯一的目标是在使用该程序时为用户提供类似终端的体验。
所以我进行了大量的搜索和谷歌搜索,到目前为止我认为不可能直接从 Java.
但是,但是我们可以用 C++ 或 C 来实现这个以及更多。
因此,最好和最优化的解决方案是为此使用 C++ 库。
现在我不太了解任何此类预先存在的库(对于 Java)所以我编写了自己的 C++ 代码并使用 JNI 从 Java 调用它。
如果您认为对于这样一个小问题每次都这样做太复杂了,我已经创建了一个非常简单的 Java 库来完成这一切。
这是 GitHub 页面:https://github.com/Jaysmito101/SeriousConsole
使用起来非常简单
我的代码:
import com.jaysmito.sconsole.SeriousConsole;
import java.nio.file.*;
public class Main{
public static void main(String[] args) throws Exception{
SeriousConsole.initConsole(Path.of("").toAbsolutePath().toString() + "/libseriousconsole.so");
SeriousConsole.print("Enter a String : ");
String s = SeriousConsole.readLine();
System.out.println("The String entered is: " + s);
}
}
编译:
javac -cp SeriousConsole.jar Main.java
致运行:
java -cp .:SeriousConsole.jar Main
您可以从 GitHub link.
下载 jar 和 so 文件注意:这个库是 java.io.Console