Есть ли более краткий способ преобразования строки в набор символов в Java?JAVA

Программисты JAVA общаются здесь
Anonymous
Есть ли более краткий способ преобразования строки в набор символов в Java?

Сообщение Anonymous »

Я хочу создать неизменяемый набор определенных символов и для ясности хочу инициализировать этот набор строкой. Прямо сейчас я могу сделать это вот так:

Код: Выделить всё

static {
final String hexCharacters = "0123456789ABCDEFabcdef"; //NON-NLS
final Set tempHexSet = new HashSet();
for (char c : hexCharacters.toCharArray()) {
tempHexSet.add(c);
}
final Set hexSet = Collections.unmodifiableSet(tempHexSet);
}
Но это неуклюже и многословно. Я бы предпочел сделать это примерно так:

Код: Выделить всё

private static final Set hexSet
= Collections.unmodifiableSet(
new HashSet(
"0123456789ABCDEFabcdef".toCharArray()
)
);
Конечно, я не могу инициализировать Set массивом, поэтому попробовал так:

Код: Выделить всё

private static final Set hexSet = Collections.unmodifiableSet(
new HashSet("0123456789ABCDEFabcdef"
.chars()
.boxed()
.collect(Collectors.toList())
);
Это не компилируется, поскольку метод chars() возвращает поток значений int, а не символов. Я не могу сопоставить значения с символами, потому что нет класса CharStream и нет метода сопоставления, который будет сопоставляться с примитивным объектом.
Дополнение:
Цель этого набора — инициализировать статический набор, чтобы я мог написать что-то вроде этого:

Код: Выделить всё

boolean isValidCharacter(char c) {
return hexSet.contains(c);
}
Это было бы более эффективно, чем писать следующее:

Код: Выделить всё

return "0123456789ABCDEFabcdef".contains(c);
Дополнение 2:
Я также должен отметить, что мне нужен более общий ответ, а не просто ответ, позволяющий отфильтровывать шестнадцатеричные цифры. Шестнадцатеричные цифры предназначены только для иллюстрации проблемы на примере.

Вернуться в «JAVA»