Как увеличить переменную до следующей или предыдущей буквы в алфавите? - PullRequest
17 голосов
/ 24 мая 2010

У меня прописная буква, определенная в переменной строке, и я хочу вывести следующие и предыдущие буквы в алфавите. Например, если переменная была равна 'C', я бы хотел вывести 'B' и 'D'.

Ответы [ 5 ]

28 голосов
/ 24 мая 2010

В одну сторону:

String value = "C";
int charValue = value.charAt(0);
String next = String.valueOf( (char) (charValue + 1));
System.out.println(next);
12 голосов
/ 24 мая 2010

Ну, если вы имеете в виду 'ABC', то они разделяются на две последовательности a-z и A-Z, я думаю, что самый простой способ - использовать переменную char и увеличить индекс на единицу.

char letter='c';
letter++;  // (letter=='d')

То же самое относится к декременту:

char letter='c';
letter--; // (letter=='b')

Дело в том, что буквы a-z представлены 97-122, а A-Z 65-90, поэтому, если важен регистр букв, вам следует обратить на это внимание.

6 голосов
/ 24 мая 2010

Если вы ограничены латинским алфавитом, вы можете использовать тот факт, что символы в таблице ASCII расположены в алфавитном порядке, поэтому:

System.out.println((char) ('C' + 1));
System.out.println((char) ('C' - 1));

выходы D и B.

Что вы делаете, это добавляете char и int, таким образом, эффективно добавляя int к коду ascii char. Когда вы приводите обратно к char, код ascii преобразуется в символ.

0 голосов
/ 23 апреля 2018

Все ответы верны, но, похоже, никто не дает полного объяснения, поэтому я попробую. Как и любой другой тип, char хранится как число ( 16-бит в Java ). В отличие от других нечисловых типов, сопоставление значений сохраненных чисел со значениями char s, которые они представляют, хорошо известно. Это отображение называется ASCII Table . Компилятор Java обрабатывает char s как 16-битное число, и поэтому вы можете делать следующее:

System.out.print((int)'A'); // prints 65
System.out.print((char)65); // prints A

По этой причине ++, -- и другие математические операции применяются к char s и предоставляют способ увеличивать \ уменьшать их значения.

Обратите внимание, что преобразование выполняется циклически при превышении 16-битного значения:

System.out.print((char)65601); // also prints A
System.out.print((char)-65471); // also prints A

P.S. Это также относится к Kotlin:

println('A'.toInt()) // prints 65
println(65.toChar()) // prints A
println(65601.toChar()) // prints A
println((-65471).toChar()) // prints A
0 голосов
/ 03 апреля 2017

просто так:

System.out.printf("%c\n",letter);
letter++;
...