发送一些caracters不工作 - 字符串JAVA

时间:2018-02-02 14:07:42

标签: java string

我试图打印一些字符,例如:'!',' @',' \' 但它根本不起作用...... 大写字母也不起作用......

我有这个字符串:

String admUsr = "HOMP'\'adm03!@";

但是当我尝试打印时:

irf.Send(admUsr);

仅打印:

  

hompadm03

而不是

  

HOMP \ adm03!@

我的发送功能有什么问题?

  // mandar textos     
  public void Send(int i)
  {
      try {
        r = new Robot();
        r.delay(40);
        r.keyPress(i);
        r.keyRelease(i);
      } catch (AWTException ex) {
          Logger.getLogger(iRobot_Functions.class.getName()).log(Level.SEVERE, null, ex);
      }
  }
  public void Send(String s)
  {
    byte[] bytes = s.getBytes();
    for (byte b : bytes)
    {
        try {
            int code = b;
            // keycode only handles [A-Z] (which is ASCII decimal [65-90])
            if (code > 96 && code < 123) code = code - 32;
            r = new Robot();
            r.delay(40);
            r.keyPress(code);
            r.keyRelease(code);
        } catch (AWTException ex) {
            Logger.getLogger(iRobot_Functions.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
  }

2 个答案:

答案 0 :(得分:1)

您错误地使用了keyPress()。请参阅documentation。它的论点不是文本特征;这是一个关键代码。键码是KeyEvent类的字段之一。恰好,“普通”ASCII小写字母与键码具有相同的字符代码。

您需要做的是:

  1. 阅读KeyEvent类的文档,找到Shift键的键码。

  2. 要发送大写字母,您需要为以下事件调用keyPress / keyRelease:按住Shift键;按下字母键;信密钥发布; Shift键已释放。

  3. 要发送标点符号,请查看键盘并查看标点符号所在的键。然后使用上面的shift-key组合。

答案 1 :(得分:1)

关于错误使用KeyPress()方法, DodyCodeExcpetion 已提及。 所以我想谈谈另一个问题。

admUsr字符串。

String admUsr = "HOMP'\'adm03!@";

“\”是一个Escape Sequence。所以预期的输出应该是

HOMP''adm03!@ 

而不是

HOMP\adm03!@

简单解决方案

您应该以char级别而不是字节级别处理String。 你可以看到char & byte here

的定义

使用KeyEvent.getExtendedKeyCodeForChar(int)方法查明是否存在unicode字符的扩展密钥代码。这是documentation

public void send(String s) {
    if (null == s) return;
    Robot r = null;
    char[] chars = s.toCharArray();
    try {
        for (char c : chars) {
                int code = c;
                int keyCode = KeyEvent.getExtendedKeyCodeForChar(code);
                r = new Robot();
                r.delay(40);
                r.keyPress(keyCode);
                r.keyRelease(keyCode);
        } 
    } catch (AWTException ex) {
        System.err.println(ex.getMessage());
    }
}