Оператор Java Switch-это"или"/" и " возможно?
я реализовал систему шрифтов, которая определяет, какую букву использовать с помощью операторов char switch. В моем изображении шрифта есть только заглавные буквы. Мне нужно сделать так, чтобы, например, 'a' и 'A' имели один и тот же выход. Вместо того, чтобы иметь 2x количество случаев, это может быть что-то вроде следующего:
char c;
switch(c){
case 'a' & 'A': /*get the 'A' image*/; break;
case 'b' & 'B': /*get the 'B' image*/; break;
...
case 'z' & 'Z': /*get the 'Z' image*/; break;
}
возможно ли это в java?
5 ответов:
вы можете использовать switch-case fall through, опуская
break;заявление.char c = /* whatever */; switch(c) { case 'a': case 'A': //get the 'A' image; break; case 'b': case 'B': //get the 'B' image; break; // (...) case 'z': case 'Z': //get the 'Z' image; break; }...или вы могли бы просто нормализовать в нижний регистр или верхний регистр до
switching.char c = Character.toUpperCase(/* whatever */); switch(c) { case 'A': //get the 'A' image; break; case 'B': //get the 'B' image; break; // (...) case 'Z': //get the 'Z' image; break; }
выше, вы имеете в виду или нет. Пример и: 110 & 011 = = 010, который не является ни одной из вещей, которые вы ищете.
или, просто есть 2 случая без перерыва на 1-й. Например:
case 'a': case 'A': // do stuff break;
выше все отличные ответы. Я просто хотел добавить, что когда есть несколько символов для проверки, if-else может оказаться лучше, так как вы можете вместо этого написать следующее.
// switch on vowels, digits, punctuation, or consonants char c; // assign some character to 'c' if ("aeiouAEIOU".indexOf(c) != -1) { // handle vowel case } else if ("!@#$%,.".indexOf(c) != -1) { // handle punctuation case } else if ("0123456789".indexOf(c) != -1) { // handle digit case } else { // handle consonant case, assuming other characters are not possible }конечно, если это становится более сложным, я бы рекомендовал сопоставитель регулярных выражений.
из того, что я понимаю о вашем вопросе, перед передачей символа в оператор switch вы можете преобразовать его в нижний регистр. Поэтому вам не нужно беспокоиться о верхних регистрах, потому что они автоматически преобразуются в нижний регистр. Для этого вам нужно использовать следующую функцию:
Character.toLowerCase(c);
наблюдения на интересном
Switch caseловушка ->fall throughнаswitch"операторы break необходимы, потому что без них операторы в блоках switch проваливаются:" пример Java Doc
фрагмент подряд
caseбезbreak:char c = 'A';/* switch with lower case */; switch(c) { case 'a': System.out.println("a"); case 'A': System.out.println("A"); break; }O/P для этого случая:
Aно если вы измените значение C, т. е.
char c = 'a';, тогда это вам интересный.O/P для этого случая:
a Aнесмотря на то, что тест 2-го случая терпит неудачу, программа переходит на печать
A, из-за отсутствияbreakкоторый вызываетswitchдля обработки остальной части кода как блок. Все заявления после соответствующего метке Case, выполняются в определенной последовательности.
Comments