Як перетворити Char на String в Java (Приклади)
⚡ Розумний підсумок
Перетворення char у рядок у Java приймає один виклик String.valueOf(myChar) або Character.toString(myChar). Рух у зворотному напрямку використовує charAt(index), який витягує один символ з рядка за його позицією.

У цьому посібнику ми вивчимо дві короткі програми, які переміщують значення між двома способами Java текст магазинів:
- Перетворити символ на рядок
- Перетворити рядок на символ
Ці два типи не є взаємозамінними. Char — це примітив, який містить рівно одну 16-бітну одиницю коду UTF-16, записану в одинарних лапках як 'g'. String — це об'єкт, який містить послідовність цих одиниць коду, записану в подвійних лапках як “Guru99”. Оскільки один є примітивом, а інший — об’єктом, жодне приведення типів не може їх об’єднати — цю роботу має виконати бібліотечний метод, і Java постачає по одному для кожного напрямку.
Перетворити символ у рядок
Існує кілька способів перетворити char на String у JavaВнутрішньо a Java Рядок зберігає свій текст як масив одиниць коду, тому один тип char так легко вписується в один. Тип char — це 16-бітний беззнаковий тип даних шириною два байти, що містить значення від 0 до 65 535.
Ми можемо перетворити тип char на рядок (String) за допомогою двох методів — статичного методу toString() класу Character та статичного методу valueOf() класу String. Обидва повертають новий тип String довжиною один символ, а дві програми нижче виводять однаковий результат.
Спосіб 1: використання методу toString().
Наведена нижче програма зберігає літеру g у змінна char і передає його до 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
Інші способи перетворення символу char у рядок
Ще чотири маршрути з'являються у старішому коді та у питаннях на співбесіді. Усі вони працюють, але жоден з них не читається так просто, як два вищезгадані методи, а два з них виділяють більше місця, ніж потрібно.
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Спочатку використовується char. Використовуйте Character.valueOf, а не новий конструктор Character(char), видалення якого застаріло з . Java 9. |
| масив символів | новий рядок(новий символ[]{myChar}) | Виділяє пам'ять масиву та копіює його. Резервує це для випадку, якщо у вас вже є масив char. |
| String.format | String.format(“%c”, myChar) | Найповільніший, оскільки рядок форматування аналізується під час виконання. Корисно лише тоді, коли символ є частиною більшого шаблону. |
Після того, як обидва напрямки односимвольного перетворення розглянуто, наступним кроком є зворотна операція.
Перетворення рядка на char
Ми можемо перетворити рядок (String) на символ (char) за допомогою методу charAt() класу String. Метод приймає індекс, що починається з нуля, і повертає символ char, що знаходиться на цій позиції, тому зчитування кожного символу означає вбиральня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
Зверніть увагу, що рядок String не можна просто привести: char c = (char) myStr; не компілюється, оскільки рядок String є об'єктом, а char є примітивом. Для рядка, про який вже відомо, що він містить рівно один символ, charAt(0) є повною відповіддю.
Перетворення рядка в масив символів і назад
Коли потрібен кожен символ одночасно, а не один індекс за раз, toCharArray() повертає функцію назад свіжий масив символівПеретворення цього масиву назад у текст є завданням конструктора String(char[]) або String.valueOf(char[]), і обидва копіюють масив захисно, тому подальші редагування масиву не змінюють String.
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() | Новий масив; безпечний для порожнього рядка, де повертає масив нульової довжини. |
| масив символів у рядок | новий String(chars) або String.valueOf(chars) | Новий рядок (String) плюс внутрішня копія масиву. |
| Діапазон у існуючий масив | myStr.getChars(0, 4, частина, 0) | Нічого нового; він записує дані в масив, який ви надаєте. |
Типові помилки під час конвертації char та String у Java
Більшість проблем із цими перетвореннями виникає через шість повторюваних помилок, а не через самі методи. У таблиці кожна з них поєднана з виправленням.
| Проблема | Викликати | виправляти |
|---|---|---|
| несумісні типи: рядок не можна перетворити на символ char | Спроба приведення типів, наприклад, char c = (char) myStr; | Натомість викличте myStr.charAt(0). Немає приведення типів між об'єктом та примітивом. |
| Виняток StringIndexOutOfBoundsException | charAt() викликається з від'ємним індексом або з length() для порожнього рядка | Захищайте за допомогою isEmpty() або порівнюйте індекс з length() перед читанням. |
| String.valueOf(null) викликає виняток NullPointerException | Голе значення null відповідає перевантаженню char[], яке є найбільш специфічним | Напишіть String.valueOf((Object) null), коли вам потрібен літерал null. |
| Character.toString(65) повертає A, а не 65 | Java У версії 11 додано перевантаження Character.toString(int), яке зчитує свій аргумент як кодову точку Unicode. | Використовуйте String.valueOf(65) або Integer.toString(65) для цифр 65. |
| Емоджі друкується як два спотворені символи | Символи вище U+FFFF займають два символи: старший сурогат, а потім молодший сурогат. | Зчитайте значення за допомогою codePointAt(0), а потім перебудуйте його за допомогою Character.toString(codePoint) Java 11 і пізніше. |
| Попередження про застарівання нового персонажа (myChar) | Конструктор Character(char) застарів з Java 9 та позначено для видалення | Використовуйте Character.valueOf(myChar) або дозвольте autoboxing забезпечити обгортку. |
Той самий клас String підтримує безліч суміжних вправ: зворотне перетворення рядка за допомогою рекурсії, порівняння двох рядків та друк відформатованого виводу.
