Char를 문자열로 변환하는 방법 Java (예시)
⚡ 스마트 요약
문자를 문자열로 변환하는 방법 Java 문자열에서 특정 문자(myChar)를 가져오려면 `String.valueOf(myChar)` 또는 `Character.toString(myChar)`를 한 번 호출하면 됩니다. 반대로 문자열에서 특정 문자(인덱스)를 가져오려면 해당 위치를 기준으로 문자를 추출하는 `charAt(index)`를 사용합니다.
이 튜토리얼에서는 두 가지 방식으로 값을 이동시키는 두 개의 간단한 프로그램을 살펴보겠습니다. Java 텍스트를 저장합니다:
- 문자를 문자열로 변환
- 문자열을 문자로 변환
두 유형은 서로 바꿔 쓸 수 없습니다. char는 16비트 UTF-16 코드 단위 하나를 저장하는 기본 데이터 유형으로, 작은따옴표로 묶어 'g'와 같이 표기합니다. String은 이러한 코드 단위들의 시퀀스를 저장하는 객체로, 큰따옴표로 묶어 ""와 같이 표기합니다.Guru99". 하나는 기본형이고 다른 하나는 객체이기 때문에 형변환으로는 둘을 연결할 수 없습니다. 라이브러리 메서드를 사용해야 합니다. Java 각 방향마다 하나씩 공급합니다.
문자를 문자열로 변환
문자를 문자열로 변환하는 방법에는 여러 가지가 있습니다. Java내부적으로 a Java 문자열은 텍스트를 저장합니다. char는 코드 단위의 배열이기 때문에 하나의 char 값이 그 안에 쉽게 들어갈 수 있습니다. char는 16비트 부호 없는 데이터 타입으로, 2바이트 크기이며 0부터 65,535까지의 값을 저장할 수 있습니다.
문자(char)를 문자열(String)로 변환하는 방법은 두 가지가 있습니다. 하나는 Character 클래스의 정적 메서드인 toString()이고, 다른 하나는 String 클래스의 정적 메서드인 valueOf()입니다. 두 메서드 모두 한 문자 길이의 새로운 문자열을 반환하며, 아래 두 프로그램은 동일한 결과를 출력합니다.
방법 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
이 표는 각 경로를 이용하는 것이 유리한 경우를 보여줍니다.
| 방법 | 예시 | 노트 |
|---|---|---|
| 문자열.valueOf(char) | 문자열.valueOf(myChar) | 권장 사항입니다. 한 번의 호출로, 반환되는 문자열 외에 추가 객체가 없습니다. |
| 문자.문자열로변환(char) | 문자.toString(myChar) | 마찬가지로 훌륭합니다. 출시일: 2023년 1월 Java 1.4 버전부터 String.valueOf에 위임합니다. Java 9. |
| 연쇄 | myChar + “” | 작품, 그리고 위에 Java 버전 9 이상에서는 StringBuilder 대신 invokedynamic 호출로 컴파일되므로 속도가 느리다는 이전 경고는 더 이상 유효하지 않습니다. 하지만 여전히 의도를 숨기고 있습니다. |
| 문자 래퍼 | 문자의 값(myChar).toString() | Box먼저 문자를 입력하세요. 새로운 Character(char) 생성자 대신 Character.valueOf를 사용하세요. 해당 생성자는 더 이상 사용되지 않으며 삭제될 예정입니다. Java 9. |
| 문자 배열 | 새로운 문자열(new char[]{myChar}) | 배열을 할당하고 복사합니다. 이미 char 배열을 보유하고 있는 경우에 대비하여 예약해 두세요. |
| 문자열.형식 | 문자열.format(“%c”, myChar) | 실행 시간에 형식 문자열을 파싱하기 때문에 속도가 가장 느립니다. 문자가 더 큰 템플릿의 일부인 경우에만 유용합니다. |
한 문자 변환의 양방향 과정을 모두 살펴보았으므로, 다음은 역변환입니다.
문자열을 문자로 변환
문자열 클래스의 charAt() 메서드를 사용하여 문자열을 문자로 변환할 수 있습니다. 이 메서드는 0부터 시작하는 인덱스를 인수로 받아 해당 위치에 있는 문자를 반환합니다. 따라서 모든 문자를 읽으려면 각 문자마다 charAt() 메서드를 호출해야 합니다. 화장실ping 0부터 length()에서 1을 뺀 값까지의 인덱스를 사용할 수 있습니다. 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)은 0을 반환합니다. Guru 보다는 Guru9. 범위를 벗어나면 IndexOutOfBoundsException 예외가 발생합니다.
세 가지 접근 방식은 주로 할당 대상에서 차이가 나며, 그 내용은 아래에 요약되어 있습니다.
| 태스크 | 상담 예약 번호 | 할당하는 내용 |
|---|---|---|
| 문자열을 문자 배열로 변환 | myStr.toCharArray() | 새로운 배열을 생성합니다. 빈 문자열을 입력으로 받으면 길이가 0인 배열을 반환하므로 안전합니다. |
| 문자 배열을 문자열로 변환 | 새로운 문자열(chars) 또는 문자열의 값(chars) | 새로운 문자열과 배열의 내부 복사본이 추가됩니다. |
| 기존 배열에 범위를 지정합니다. | myStr.getChars(0, 4, part, 0) | 새로운 내용은 없습니다. 사용자가 제공하는 배열에 기록하는 기능입니다. |
문자를 문자열로 변환할 때 흔히 발생하는 오류 Java
이러한 변환 과정에서 발생하는 문제의 대부분은 방법 자체의 문제라기보다는 반복적으로 발생하는 6가지 오류에서 비롯됩니다. 아래 표는 각 오류와 해결 방법을 함께 보여줍니다.
| 문제 | 원인 | 수정 |
|---|---|---|
| 호환되지 않는 유형: 문자열을 문자로 변환할 수 없습니다. | char c = (char) myStr; 와 같은 형변환 시도 | 대신 myStr.charAt(0)을 호출하세요. 객체와 기본형 사이에는 형변환이 없습니다. |
| 문자열 인덱스 범위를 벗어남 예외 | charAt() 함수를 음수 인덱스로 호출하거나, 빈 문자열에 length() 함수를 호출하면 오류가 발생합니다. | 읽기 전에 isEmpty()로 비어 있는지 확인하거나 인덱스와 length()를 비교하세요. |
| String.valueOf(null)은 NullPointerException을 발생시킵니다. | 빈 null은 char[] 오버로드와 일치하며, 이는 가장 구체적인 형태입니다. | 원하는 결과가 'null'일 경우, String.valueOf((Object) null)을 사용하세요. |
| Character.toString(65)는 65가 아닌 A를 반환합니다. | Java 11 버전에서는 인수를 유니코드 코드 포인트로 읽는 Character.toString(int) 오버로드 메서드가 추가되었습니다. | 숫자 65를 사용하려면 String.valueOf(65) 또는 Integer.toString(65)를 사용하십시오. |
| 이모티콘이 두 개의 알아볼 수 없는 기호로 인쇄됩니다. | U+FFFF보다 큰 문자는 두 개의 문자를 차지하며, 높은 대체 문자 다음에 낮은 대체 문자가 이어집니다. | codePointAt(0)을 사용하여 값을 읽은 다음, Character.toString(codePoint)을 사용하여 다시 문자열로 만듭니다. Java 11 년 이후 |
| 새로운 Character(myChar)에 대한 사용 중단 경고 | Character(char) 생성자는 더 이상 사용되지 않습니다. Java 9번이며 제거 대상으로 표시되어 있습니다. | Character.valueOf(myChar)를 사용하거나, 자동 박싱을 통해 래퍼를 제공하도록 하세요. |
동일한 String 클래스는 다양한 인접 연습 문제를 지원합니다. 재귀를 사용하여 문자열을 뒤집기, 두 문자열을 비교합니다예산 및 서식이 지정된 출력 인쇄.
