1

我正在尝试编写一个方法,该方法将采用单个字符串并(如果可能)返回它对应的虚拟键码。

例如:

private static int getKeyCode(final String key) {
    if(key.length != 1)
        throw new IllegalArgumentException("Only support single characters");

    // Also check to see if the 'key' is (1-9)(A-Z), otherwise exception

    // How to perform the conversion?
}

// Returns KeyEvent.VK_D
MyKeyUtils.getKeyCode("D");

因此,传递MyKeyUtils.getKeyCode("blah")会抛出一个,IllegalArgumentException因为“blah”有 4 个字符。此外,传递MyKeyUtils.getKeyCode("@")会引发相同的异常,因为“@”既不是数字 0-9 也不是字符 A - Z。

任何想法如何进行正则表达式检查以及实际转换?提前致谢!

4

2 回答 2

2
if (key.matches("[^1-9A-Z]"))
  throw new IllegalArgumentException("...");

可以使用(int) key.charAt(0)value进行转换,因为:

public static final int VK_0 48 
public static final int VK_1 49 
...
public static final int VK_9 57 
public static final int VK_A 65 
...
于 2012-10-16T16:04:24.600 回答
0

^[0-9A-Za-z]$将您的输入与或匹配^[\\w&&[^_]]$

if(!key.matches("[0-9A-Za-z]")) 
  throw new IllegalArgumentException("invalid input ...");

int code = key.charAt(0);
于 2012-10-16T15:59:02.340 回答