Как преобразовать Char в строку Java (Примеры)
⚡ Умное резюме
Преобразование символа в строку в Java Применяется один вызов метода String.valueOf(myChar) или Character.toString(myChar). Перемещение в обратном направлении осуществляется с помощью метода charAt(index), который извлекает один символ из строки по его позиции.
В этом уроке мы рассмотрим две короткие программы, которые перемещают значение между двумя способами. Java хранит текст:
- Преобразовать символ в строку
- Преобразовать строку в символ.
Эти два типа не взаимозаменяемы. Символ (char) — это примитив, содержащий ровно одну 16-битную кодовую единицу UTF-16, записывается в одинарные кавычки как 'g'. Строка (String) — это объект, содержащий последовательность таких кодовых единиц, записывается в двойные кавычки как "".Guru99”. Поскольку один из них является примитивом, а другой — объектом, приведение типов не может их связать — эту работу должен выполнить библиотечный метод, и Java по одному комплекту для каждого направления.
Преобразование символа в строку
Существует несколько способов преобразовать символ в строку. JavaВнутри a Java Строка хранит свой текст. В качестве массива кодовых единиц, именно поэтому один символ так легко вписывается в него. Символ — это 16-битный беззнаковый тип данных шириной в два байта, содержащий значения от 0 до 65 535.
Преобразовать символ в строку можно двумя способами: статическим методом toString() класса Character и статическим методом valueOf() класса String. Оба метода возвращают совершенно новую строку длиной в один символ, и обе приведенные ниже программы выводят одинаковый результат.
Способ 1: использование метода toString()
Приведенная ниже программа сохраняет букву g в a символьная переменная и передает его в метод Character.toString(), который возвращает этот единственный символ в виде строки. Код можно редактировать, поэтому измените букву и запустите его снова, чтобы увидеть результат.
public class CharToString_toString {
public static void main(String[] args) {
//input character variable
char myChar = 'g';
//Using toString() method
//toString method take character parameter and convert string.
String myStr = Character.toString(myChar);
//print string value
System.out.println("String is: " + myStr);
}
}
Ожидаемый результат:
String is: g
Способ 2: использование метода valueOf()
Вторая программа просто заменяет String.valueOf(myChar) и больше ничего не меняет. Поскольку Java 9. Оба вызова представляют собой одну и ту же операцию: Character.toString(char) реализован как вызов String.valueOf(char), поэтому ни один из них не является заметно быстрее другого.
public class CharToString_valueOf {
public static void main(String[] args) {
char myChar = 'g';
//valueOf method take character parameter and convert string.
String myStr = String.valueOf(myChar);
////print string value
System.out.println("String is: " + myStr);
}
}
Ожидаемый результат:
String is: g
Другие способы преобразования символа в строку.
В более старом коде и в вопросах на собеседованиях встречаются еще четыре варианта. Все они работают, но ни один из них не читается так же понятно, как два описанных выше метода, и два из них выделяют больше памяти, чем необходимо.
public class CharToStringMore { public static void main(String[] args) { char myChar = 'g'; // 1. concatenation with an empty literal String byConcat = myChar + ""; // 2. the Character wrapper instance method String byWrapper = Character.valueOf(myChar).toString(); // 3. a one-element array of code units String byArray = new String(new char[]{myChar}); // 4. the format() helper with the %c conversion String byFormat = String.format("%c", myChar); System.out.println(byConcat + byWrapper + byArray + byFormat); } }
Ожидаемый результат:
gggg
В таблице указано, когда целесообразно использовать тот или иной маршрут.
| Способ доставки | Пример | Заметки |
|---|---|---|
| String.valueOf(char) | String.valueOf(myChar) | Рекомендуется. Один вызов, никаких дополнительных объектов помимо возвращаемой строки. |
| Character.toString(char) | Character.toString(myChar) | Одинаково хорош. Доступен с Java 1.4 и делегирует вызов методу String.valueOf, поскольку Java 9. |
| конкатенация | myChar + “” | Работы и на Java В версиях 9 и более поздних он компилируется в вызов invokedynamic, а не в StringBuilder, поэтому старое предупреждение о медленной работе больше не актуально. Он по-прежнему скрывает намерение. |
| Оболочка персонажа | Character.valueOf(myChar).toString() | BoxСначала определите символ. Используйте Character.valueOf, а не новый конструктор Character(char), который был объявлен устаревшим и будет удален. Java 9. |
| массив символов | new String(new char[]{myChar}) | Выделяет массив и копирует его. Рекомендуется использовать этот метод только в том случае, если у вас уже есть символьный массив. |
| String.format | String.format("%c", myChar) | Самый медленный вариант, поскольку строка формата анализируется во время выполнения. Полезен только в том случае, если символ является частью более крупного шаблона. |
После рассмотрения преобразования одного символа в обоих направлениях, переходим к обратной операции.
Преобразовать строку в символ
Мы можем преобразовать строку в символ, используя метод `charAt()` класса `String`. Этот метод принимает индекс, начинающийся с нуля, и возвращает символ, находящийся в этой позиции, поэтому чтение каждого символа означает... уборнаяping от 0 до length() минус один. Запрос индекса меньше 0 или length() и выше вызывает исключение StringIndexOutOfBoundsException.
Приведённая ниже программа обходит строку. Guru99 символов по одной позиции за раз, и каждый символ с указанием его индекса выводится на экран.
//Convert String to Character using string method
package com.guru99;
public class StringToChar {
public static void main(String[] args)
{
//input String
String myStr = "Guru99";
//find string length using length method.
int stringLength =myStr.length();
//for loop start 0 to total length
for(int i=0; i < stringLength;i++)
{
//chatAt method find Position and convert to character.
char myChar = myStr.charAt(i);
//print string to character
System.out.println("Character at "+i+" Position: "+myChar);
}
}
}
Ожидаемый результат:
Character at 0 Position: G Character at 1 Position: u Character at 2 Position: r Character at 3 Position: u Character at 4 Position: 9 Character at 5 Position: 9
Обратите внимание, что строку нельзя просто привести к нужному типу: `char c = (char) myStr;` не компилируется, потому что строка — это объект, а `char` — примитивный тип. Для строки, которая, как известно, содержит ровно один символ, `charAt(0)` — это полный ответ.
Преобразование строки в массив символов и обратно.
Когда все символы нужны одновременно, а не по одному индексу за раз, метод toCharArray() возвращает управление. новый массив символовПреобразование этого массива обратно в текст — задача конструктора String(char[]) или String.valueOf(char[]), и оба метода копируют массив в целях безопасности, чтобы последующие изменения массива не повлияли на строку.
public class StringCharArray { public static void main(String[] args) { String myStr = "Guru99"; // the text split into its array of code units char[] chars = myStr.toCharArray(); System.out.println(chars.length); System.out.println(chars[0]); // the array turned back into text System.out.println(new String(chars)); System.out.println(String.valueOf(chars)); // one range copied into an array you already own char[] part = new char[4]; myStr.getChars(0, 4, part, 0); System.out.println(new String(part)); } }
Ожидаемый результат:
6 G Guru99 Guru99 Guru
Четвертый метод, getChars(srcBegin, srcEnd, dst, dstBegin), копирует диапазон в уже имеющийся массив вместо создания нового. Конечный индекс является исключающим, поэтому getChars(0, 4, part, 0) возвращает Guru , а не Guru9. Выход за пределы допустимого диапазона приводит к возникновению исключения IndexOutOfBoundsException.
Три подхода различаются главным образом тем, что они выделяют, как это суммировано ниже.
| Сложность задачи | Позвонить | Что оно выделяет |
|---|---|---|
| Преобразование строки в массив символов | myStr.toCharArray() | Новый массив; безопасен при работе с пустой строкой, в этом случае возвращается массив нулевой длины. |
| преобразование массива символов в строку | new String(chars) or String.valueOf(chars) | Новая строка плюс внутренняя копия массива. |
| Вставить значение в существующий массив | myStr.getChars(0, 4, part, 0) | Ничего нового; программа записывает данные в предоставленный вами массив. |
Распространенные ошибки при преобразовании символов в строки в Java
Большинство проблем при этих преобразованиях связано с шестью повторяющимися ошибками, а не с самими методами. В таблице каждая ошибка сопровождается способом её исправления.
| Проблема | Вызывать | фиксированный |
|---|---|---|
| Несовместимые типы: строка не может быть преобразована в символ. | Попытка приведения типа, например, char c = (char) myStr; | Вместо этого вызовите myStr.charAt(0). Приведение типа между объектом и примитивным типом не происходит. |
| StringIndexOutOfBoundsException | Функция charAt() вызывается с отрицательным индексом или функцией length() для пустой строки. | Используйте функцию isEmpty() для защиты от чтения или сравните индекс с длиной (length()) перед чтением. |
| String.valueOf(null) throws NullPointerException | Пустой символ соответствует перегрузке массива char[], которая является наиболее специфичной. | Используйте String.valueOf((Object) null), если вам нужен именно текст null. |
| Character.toString(65) возвращает A, а не 65. | Java В версии 11 добавлена перегрузка метода Character.toString(int), которая считывает свой аргумент как кодовую точку Unicode. | Для ввода цифры 65 используйте String.valueOf(65) или Integer.toString(65). |
| Эмодзи отображается в виде двух искаженных символов. | Символы выше U+FFFF занимают два места: высокое суррогатное значение, за которым следует низкое суррогатное значение. | Прочитайте значение с помощью codePointAt(0), затем перестройте его с помощью Character.toString(codePoint) on Java 11 и позже. |
| Предупреждение об устаревании функции при создании нового персонажа (myChar) | Конструктор Character(char) устарел с момента его создания. Java 9 и отмечены для удаления | Используйте Character.valueOf(myChar) или позвольте автоупаковке предоставить обертку. |
Один и тот же класс String поддерживает множество смежных упражнений: переворачивание строки с помощью рекурсии, сравнение двух строк и печать отформатированного вывода.
