Преобразование символа в верхний регистр

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 класс, он предоставляет много полезных методов для преобразования или тестирования символов.

f = Character.toUpperCase(f);
l = Character.toUpperCase(l);

Поскольку вы знаете, что символы в нижнем регистре, вы можете вычесть соответствующее значение 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 ();

Конечно, стоит сменить и название.

Другие вопросы по тегам