Как изменить шрифт, не используя методы вроде toUpperCase?
Например, чтобы при вводе "привет", на выходе было "ПРИВЕТ".
Но без использования метода toUpperCase().
import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
String text = in.next();
// пробовал разные варианты, но пока не хватает знаний
}
}
Ответы (2 шт):
См. таблицу символов UTF-8. В ней сначала идут заглавные буквы, потом строчные. Символ char в java хранит в себе десятичное значение кода символа. Чтобы из строчной буквы получить заглавную, нужно сместить код вниз на 32 и наоборот.
Заглавные латинские буквы: A - Z ⇒ коды символов 65 - 90.
Строчные латинские буквы: a - z ⇒ коды символов 97 - 122.
Аналогичная ситуация с кириллическими буквами:
Заглавные кириллические буквы: А - Я ⇒ коды символов 1040 - 1071.
Строчные кириллические буквы: а - я ⇒ коды символов 1072 - 1103.
Отдельная история: Ё ⇒ 1025, ё ⇒ 1105.
Пример кода:
public static void main(String[] args) {
System.out.println(toLowerCase("СЛОВА_С-БУКВОЙ Ё"));
System.out.println(toLowerCase("UPPER=WORDS_lower*words"));
// слова_с-буквой ё
// upper=words_lower*words
}
private static String toLowerCase(String upperCase) {
char[] charArr = upperCase.toCharArray();
for (int i = 0; i < charArr.length; i++) {
if (charArr[i] == 1025) {
charArr[i] = 1105;
} else if (charArr[i] >= 65 && charArr[i] <= 90
|| charArr[i] >= 1040 && charArr[i] <= 1071) {
charArr[i] = (char) (charArr[i] + 32);
}
}
return String.valueOf(charArr);
}
Лучше, конечно, через кодировку, но есть и такой (наваристо-забористый) вариант:
import java.util.*;
public class Main {
// Массив замены символов
public static Map<char, char> map = new HashMap<>() {{
put('а', 'А');
put('б', 'Б');
...
put('я', 'Я');
}};
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
String text = in.next();
// Выходная строка
String output = "";
for(int i = 0; i < text.length(); i++) {
// Получить значение из входной строки
char c = text.charAt(i);
// Получить значение из массива замены
char value = Main.map.get(c);
// Если не Null, то прибавить к выходной строке значение (value)
// из массива замены, иначе сам символ из входной строки
output += value? value: c;
}
}
}