gpt4 book ai didi

java - 如何从控制台输入字符串获取控制字符

转载 作者:行者123 更新时间:2023-12-02 01:35:54 24 4
gpt4 key购买 nike

我已经为此浏览了建议的“已回答”问题。大多数情况下,他们只是想丢弃这种“不可打印”的输入。我想用它。

我使用

从键盘输入返回一个 UTF8 String
BufferedReader br = new BufferedReader( new InputStreamReader(System.in, 'UTF-8' ));
String response = br.readLine();

我有兴趣确定用户是否有输入,例如,向上箭头或向下箭头作为其击键之一。

迭代此 String 中的 char,我发现向下箭头转换为 (int value for char code>) 27, 91, 66,即 3 个 char。第一个值对应于Escape。因此,这似乎不是识别单个字符并确定它是否不可打印的问题。

另外,我不清楚为什么这个控制字符不能作为单个 UTF8 字符打印出来,而是作为 UTF8 字符的 3 个组成部分打印出来:这是否意味着当您迭代 String 您实际上是在逐字节获取其内容吗?

我只是想知道是否有任何记录或巧妙的方法可以在给定的 UTF8 字符串中执行此操作(查找和识别控制字符)。也许是 Apache 共享资源。或者也许在 Groovy 中(我实际上使用的是 Groovy,而不是 Java)?

最佳答案

您可以使用 Character::isISOControl 方法 ( javadoc ) 测试真实的控制字符。

但是,正如评论中所述,向上箭头和向下箭头是击键而不是字符。它们在输入流中实际生成的内容取决于平台。例如,如果您使用符合 ANSI 的终端或终端仿真器,则向上箭头将映射到序列 ESC [ A。如果您只是过滤掉 ISO 控制字符,则只会删除 ESC

我认为没有一种可靠的独立于平台的方法来过滤掉因用户错误地键入箭头键而产生的垃圾。对于特定于平台的解决方案,您需要了解用户的输入设备生成哪些特定序列。然后检测并删除序列

关于java - 如何从控制台输入字符串获取控制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55280529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com