Подтвердить что ты не робот

Преобразование 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, преобразованные в верхний регистр.

4b9b3361

Ответ 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 ();

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