I see what you are trying to do. None of the other answers is correct.
You want to obtain the "correct" KeyEvent constant for a given character, and you want to do so without having to write some kind of lookup table that would be a zillion lines long.
Indeed, reflection will help you out here. It will be reasonably slow. But it will do the job. Whether the job actually needs doing is another question. :-)
The function in question you want is probably something like this:
/**
* If possible, returns an {@code int} equal to one of the {@code public
* static final int} constants present in the {@link KeyEvent} class
* whose names start with {@code VK_}.
*
* <p>This implementation does no error handling whatsoever and has not
* been tested or compiled.</p>
*
* <p>This method is placed explicitly in the public domain.</p>
*
* @param c the character to use while searching for a field; no attempt
* will be made by this implementation to validate it in any way
*
* @return a {@link KeyEvent} constant whose name starts with {@code VK_}
*
* @exception Exception for any of a number of possible reasons
*/
public int getKeyEventConstant(final char c) throws Exception {
final Field field = KeyEvent.class.getField(String.format("VK_%S", Character.valueOf(c)));
assert field != null;
return field.getInt(null);
}
Then, you could feed it like the following, although you will have all sorts of problems if the supplied String contains characters the function I described above is not edited to deal with exceptions properly:
public toKeyEventCodes(final String s) {
int[] returnValue = null;
if (s != null && !s.isEmpty()) {
final Collection<Integer> codes = new ArrayList<Integer>(s.length());
final char[] chars = s.toCharArray();
assert chars != null;
assert chars.length > 0;
for (final char c : chars) {
if (!Character.isWhitespace(c)) { // TODO: weed out other obvious dumb chars
codes.add(Integer.valueOf(getKeyEventConstant(c)));
}
}
returnValue = codes.toArray(new int[codes.size()]);
}
if (returnValue == null) {
returnValue = new int[0];
}
return returnValue;
}
All of this code is untested. Good luck. I'm guessing that you still have something overly complicated going on but hopefully this will get you pointed in the right direction.
Stringinto an array ofKeyEvents.Robotwrite out a long text string. I'm not sure I understand why it shouldn't be done.