当前位置: 首页 > 面试题库 >

如何使Java.awt.Robot类型的unicode字符?(可能吗?)

颛孙玉石
2023-03-14
问题内容

我们有一个用户提供的字符串,其中可能包含unicode字符,并且我们希望机器人键入该字符串。

如何将字符串转换为机器人将使用的keyCode?
您如何做到这一点,使其也与Java版本无关(1.3-> 1.6)?

我们为“ ascii”字符工作的是

//char c = nextChar();
//char c = 'a'; // this works, and so does 'A'
char c = 'á'; // this doesn't, and neither does 'Ă'
Robot robot = new Robot();
KeyStroke key = KeyStroke.getKeyStroke("pressed " + Character.toUpperCase(c) );
if( null != key ) {
  // should only have to worry about case with standard characters
  if (Character.isUpperCase(c))
  {
    robot.keyPress(KeyEvent.VK_SHIFT);
  }

  robot.keyPress(key.getKeyCode());
  robot.keyRelease(key.getKeyCode());

  if (Character.isUpperCase(c))
  {
    robot.keyRelease(KeyEvent.VK_SHIFT);
  }
}

问题答案:

基于javamonkey79的代码,我创建了以下代码段,该代码段适用于所有Unicode值…

public static void pressUnicode(Robot r, int key_code)
{
    r.keyPress(KeyEvent.VK_ALT);

    for(int i = 3; i >= 0; --i)
    {
        // extracts a single decade of the key-code and adds
        // an offset to get the required VK_NUMPAD key-code
        int numpad_kc = key_code / (int) (Math.pow(10, i)) % 10 + KeyEvent.VK_NUMPAD0;

        r.keyPress(numpad_kc);
        r.keyRelease(numpad_kc);
    }

    r.keyRelease(KeyEvent.VK_ALT);
}

这会自动遍历unicode键码的每十年,将其映射到对应的VK_NUMPAD,并相应地按下/释放键。



 类似资料:
  • 问题内容: 我已经知道如何使用键入单个字符,如下所示。如何简单地 一次* 在文本框中输入 整个 预定义值? * 问题答案: 常见的解决方案是使用剪贴板:

  • 以下是在java中使用正则表达式的Boundary Matchers的各种示例。 Sr.No 构造和匹配 1 ^ 一行的开头。 2 $ 一行的结尾。 3 \b 一个单词边界。 4 \B 非字边界。 5 \A 输入的开始。 6 \G 上一场比赛结束。 7 \Z 输入结束但是对于最终终止符,如果有的话。 8 \z 输入结束。

  • 以下是使用java中的正则表达式匹配Unicode字符类的各种示例。 Sr.No 构造和匹配 1 \p{IsLatin} 拉丁文字符。 2 \p{InGreek} 希腊街区的一个角色。 3 \p{Lu} 一个大写字母。 4 \p{IsAlphabetic} 字母字符(二进制属性)。 5 \p{Sc} 货币符号。 6 \P{InGreek} 除希腊街区之外的任何角色。 7 [\p{L}&&[^\p{

  • 问题内容: Java中的类定义了用于检查给定参数是否与某些Unicode字符相等或属于某种类型类别的方法。这些字符和类型类别已命名。 由于在给定的javadoc说,对于名为字符的例子是 ,,…; 例如名为类型类别 ,… 但是,作为或值而不是枚举,这些类型的名称在运行时被“隐藏”。 因此, 是否有可能在运行时获取字符和/或类型类别的名称? 问题答案: JDK7将有一个 函数(READ:类java.l

  • 所以Java中的一个“char”是2个字节。(可以从这里验证。) 我有以下示例代码: 编辑2:如果我打开编码为UTF-16 BE的文件“baz.txt”,我将在文本编辑器中看到欧元字符,我想这是有意义的。

  • 问题内容: 以下内容将替换ASCII控制字符(的缩写): 以下内容将替换所有ASCII不可打印字符(的缩写),包括带重音符号的字符: 但是,两者均不适用于Unicode字符串。有谁能从Unicode字符串中删除不可打印字符的好方法? 问题答案: 详细了解Unicode正则表达式。支持他们。