protected static String getConcernNameWithMnemonic( Concern concern, Set<Character> mnemonicsAlreadyUsed) { String concernName = concern.getDisplayName(); assert concernName != null && !concernName.isEmpty(); if (concernName.indexOf('&') >= 0) return concernName; char[] buf = concernName.toCharArray(); char[] newBuf = new char[buf.length + 1]; // Add one for the ampersand for (int i = 0, newIndex = 0; i < buf.length; ++i, ++newIndex) { char c = buf[i]; if ((newIndex == i) && Character.isLetter(c) && mnemonicsAlreadyUsed.add(c)) // Returns true if mnemonic doesn't exist { newBuf[newIndex++] = '&'; } newBuf[newIndex] = c; } return new String(newBuf); }