Преобразование char в верхний регистр
String lower = Name.toLowerCase();
int a = Name.indexOf(" ",0);
String first = lower.substring(0, a);
String last = lower.substring(a+1);
char f = first.charAt(0);
char l = last.charAt(0);
System.out.println(l);
как бы получить переменные F и L, преобразованные в верхний регистр.
Ответы
Ответ 1
Вы можете использовать Character#toUpperCase()
для этого.
char fUpper = Character.toUpperCase(f);
char lUpper = Character.toUpperCase(l);
Однако есть некоторые ограничения, так как мир знает о многих других персонажах, чем может когда-либо соответствовать в 16-битном диапазоне char
. См. Также следующую выдержку javadoc:
Примечание. Этот метод не может обрабатывать дополнительные символы . Для поддержки всех символов Юникода, включая дополнительные символы, используйте метод toUpperCase(int)
.
Ответ 2
Взгляните на класс java.lang.Character
, он предоставляет множество полезных методов для преобразования или проверки символов.
Ответ 3
f = Character.toUpperCase(f);
l = Character.toUpperCase(l);
Ответ 4
Вместо использования существующих утилит вы можете попробовать выполнить преобразование с использованием логической операции:
В верхний регистр:
char upperChar = (char) (c & 0x5f)
В нижнем регистре
char lowerChar = (char) (c ^ 0x20)
например.
char fUpper = (char) (f & 0x5f);
char lUpper = (char) (l & 0x5f);
Как это работает:
Двоичная, шестнадцатеричная и десятичная таблица:
------------------------------------------
| Binary | Hexadecimal | Decimal |
-----------------------------------------
| 1011111 | 0x5f | 95 |
------------------------------------------
| 100000 | 0x20 | 32 |
------------------------------------------
Пусть приведен пример небольшого преобразования l
в l
:
Двоичная операция AND: (l & 0x5f)
l
символ имеет ASCII 108 и 01101100
- двоичное представление.
1101100
& 1011111
-----------
1001100 = 76 in decimal which is **ASCII** code of L
Аналогично преобразование l
в l
:
Операция двоичного XOR: (c ^ 0x20)
1001100
^ 0100000
-----------
1101100 = 108 in decimal which is **ASCII** code of l
Ответ 5
Вы можете применить .toUpperCase() непосредственно к переменным String или как атрибут для текстовых полей. Пример: -
String str;
TextView txt;
str.toUpperCase();// will change it to all upper case OR
txt.append(str.toUpperCase());
txt.setText(str.toUpperCase());
Ответ 6
System.out.println(first.substring(0,1).toUpperCase());
System.out.println(last.substring(0,1).toUpperCase());
Ответ 7
Если вы включаете apache commons lang jar в свой проект, то проще всего сделать следующее:
WordUtils.capitalize(Name)
заботится обо всех грязных работах для вас.
См. Javadoc здесь
Кроме того, у вас также есть метод capizeFully (String), который также уменьшает количество остальных символов.
Ответ 8
Я думаю, вы пытаетесь загладить первый и последний символ каждого слова в предложении с пробелом в качестве разделителя.
Может быть сделано через StringBuffer
:
public static String toFirstLastCharUpperAll(String string){
StringBuffer sb=new StringBuffer(string);
for(int i=0;i<sb.length();i++)
if(i==0 || sb.charAt(i-1)==' ' //for first character of string/each word
|| i==sb.length()-1 || sb.charAt(i+1)==' ') //for last character of string/each word
sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
return sb.toString();
}
Ответ 9
Поскольку вы знаете, что символы являются строчными, вы можете вычесть соответствующее значение ASCII, чтобы сделать их прописными:
char a = 'a';
a -= 32;
System.out.println("a is " + a); //a is A
Вот Таблица ASCII для справки
Ответ 10
Самое простое решение для вашего случая - измените первую строку, пусть это будет делать только противоположное:
String lower = Name.toUpperCase ();
Конечно, стоит также изменить свое имя.