Преобразование символа в верхний регистр
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 в верхнем регистре.
11 ответов
Ты можешь использовать Character#toUpperCase()
за это.
char fUpper = Character.toUpperCase(f);
char lUpper = Character.toUpperCase(l);
Однако он имеет некоторые ограничения, поскольку мир знает о гораздо большем количестве символов, чем когда-либо вписывается в 16 бит char
спектр. Смотрите также следующую выдержку из Javadoc:
Примечание. Этот метод не может обрабатывать дополнительные символы. Для поддержки всех символов Юникода, включая дополнительные символы, используйте
toUpperCase(int)
метод.
Вместо использования существующих утилит, вы можете попробовать преобразование ниже, используя логическую операцию:
В верхний регистр:
char upperChar = 'l' & 0x5f
В нижнем регистре:
char lowerChar = 'L' ^ 0x20
Как это устроено:
Двоичные, шестнадцатеричные и десятичные таблицы:
------------------------------------------
| Binary | Hexadecimal | Decimal |
-----------------------------------------
| 1011111 | 0x5f | 95 |
------------------------------------------
| 100000 | 0x20 | 32 |
------------------------------------------
Давайте возьмем небольшой пример l
в L
преобразование:
Двоичная операция И: (l & 0x5f)
l
персонаж имеет ASCII 108 и 01101100
является двоичным представлением.
1101100
& 1011111
-----------
1001100 = 76 in decimal which is **ASCII** code of L
Точно так же L
в l
преобразование:
Двоичная операция XOR: (L ^ 0x20)
1001100
^ 0100000
-----------
1101100 = 108 in decimal which is **ASCII** code of l
Посмотрите на java.lang.Character
класс, он предоставляет много полезных методов для преобразования или тестирования символов.
Поскольку вы знаете, что символы в нижнем регистре, вы можете вычесть соответствующее значение ASCII, чтобы сделать их прописными:
char a = 'a';
a -= 32;
System.out.println("a is " + a); //a is A
Вот таблица ASCII для справки
System.out.println(first.substring(0,1).toUpperCase());
System.out.println(last.substring(0,1).toUpperCase());
Если вы включили в свой проект apache commons lang jar, то самым простым решением было бы сделать следующее:
WordUtils.capitalize(Name)
берет на себя всю грязную работу за вас. Смотрите Javadoc здесь
Кроме того, у вас также есть метод capitalizeFully(String), который также строчные буквы остальных символов.
Вы можете применять.toUpperCase() непосредственно к строковым переменным или как атрибут к текстовым полям. Пример: -
String str;
TextView txt;
str.toUpperCase();// will change it to all upper case OR
txt.append(str.toUpperCase());
txt.setText(str.toUpperCase());
Предположим, у вас есть переменная, которую вы хотите разделить
String name = "Your name variable";
char nameChar = Character.toUpperCase(name.charAt(0));
Я думаю, что вы пытаетесь использовать первый и последний знак каждого слова в предложении с пробелом в качестве разделителя.
Можно сделать через 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();
}
Самое простое решение для вашего случая - измените первую строку, сделайте прямо противоположное:
String lower = Name.toUpperCase ();
Конечно, стоит сменить и название.