Char를 문자열로 변환하는 방법 Java (예시)

⚡ 스마트 요약

문자를 문자열로 변환하는 방법 Java 문자열에서 특정 문자(myChar)를 가져오려면 `String.valueOf(myChar)` 또는 `Character.toString(myChar)`를 한 번 호출하면 됩니다. 반대로 문자열에서 특정 문자(인덱스)를 가져오려면 해당 위치를 기준으로 문자를 추출하는 `charAt(index)`를 사용합니다.

  • 🔘 문자열.valueOf: String.valueOf(myChar)는 한 문자로 된 문자열을 반환하며 변환의 의도를 가장 명확하게 나타냅니다.
  • ☑️ 문자.toString: Character.toString(myChar)는 동일한 작업을 수행하며, Java 9는 단순히 String.valueOf에 위임합니다.
  • ✅ charAt: charAt(index)는 0부터 시작하는 위치의 문자를 반환하며, 유효 범위를 벗어나면 StringIndexOutOfBoundsException 예외를 발생시킵니다.
  • 🧪 문자 배열: toCharArray()는 문자열을 문자 배열로 분할하고, new String(chars)는 해당 배열로부터 텍스트를 다시 구성합니다.
  • 🛠️ 캐스팅 없음: 문자열은 문자형(char)으로 형변환할 수 없습니다. 문자열은 기본 데이터 유형이 아닌 객체이기 때문입니다.
  • 📌 유니코드 제한: 문자는 16비트 UTF-16 코드 단위 하나를 저장하므로 이모지를 표현하려면 두 개의 문자 또는 Character.toString(codePoint)가 필요합니다.

Java 문자를 문자열로 변환하고 문자열을 다시 문자로 변환하는 코드

이 튜토리얼에서는 두 가지 방식으로 값을 이동시키는 두 개의 간단한 프로그램을 살펴보겠습니다. Java 텍스트를 저장합니다:

  1. 문자를 문자열로 변환
  2. 문자열을 문자로 변환

두 유형은 서로 바꿔 쓸 수 없습니다. 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 클래스는 다양한 인접 연습 문제를 지원합니다. 재귀를 사용하여 문자열을 뒤집기, 두 문자열을 비교합니다예산 및 서식이 지정된 출력 인쇄.

자주 묻는 질문

char는 작은따옴표로 묶인 16비트 UTF-16 코드 단위 하나를 저장하는 기본 데이터 유형입니다. String은 큰따옴표로 묶인 이러한 코드 단위들의 시퀀스를 저장하는 객체이며, 기본 데이터 유형에서는 사용할 수 없는 length() 및 charAt()과 같은 메서드를 가지고 있습니다.

아니요. Java 9. Character.toString(char)는 String.valueOf(char) 호출로 구현되어 있으므로 두 코드는 동일한 코드를 실행합니다. 작업 환경에서 가독성이 더 좋은 방식을 선택하세요. String.format(“%c”, c)만이 실제로 속도가 느린 유일한 방법입니다.

문자는 16비트 코드 단위 하나를 저장하며, 이모지는 U+FFFF 위에 위치합니다. Java 이들을 서로게이트 쌍으로 분리하여 두 개의 문자를 차지하도록 합니다. codePointAt()을 사용하여 코드 포인트를 읽고 Character.toChars() 또는 Character.toString(codePoint)을 사용하여 텍스트를 다시 구성합니다.

현 A. Java 11 버전에서는 인수를 유니코드 코드 포인트로 읽는 int 오버로드가 추가되었으며, 65는 A의 코드 포인트입니다. String.valueOf(65)는 대신 숫자 65를 반환하므로 두 호출이 혼동되기 쉽습니다.

문자열을 더하기 연산자로 연결하거나, 반복문 안에서 덧셈이 발생할 경우 StringBuilder의 append() 메서드를 호출하세요. Java 문자열은 불변 객체이므로, 문자열을 연결할 때마다 기존 객체를 확장하는 대신 새 객체가 할당됩니다.

이후 Java 9. 압축 문자열은 내부 문자 배열을 바이트 배열과 코더 플래그로 대체하여 순수 Latin-1 텍스트는 문자당 1바이트를 사용합니다. 공개 API는 변경되지 않았으며 charAt() 함수는 여전히 문자를 반환합니다.

머신러닝 기반 정적 분석기는 컴파일러가 허용하는 의심스러운 변환, 예를 들어 보호되지 않은 charAt() 호출이나 char 배열 오버로드로 해석되는 String.valueOf(null) 등을 표시합니다. 이러한 분석기는 발견 가능성을 기준으로 순위를 매겨 일반적인 규칙 기반 검사의 오류를 줄여줍니다.

GitHub 부조종사 이 도구는 String.valueOf() 및 charAt()를 사용한 한 줄짜리 코드를 안정적으로 생성하지만, 학습 데이터에서 가져온 오래된 권장 사항(예: 더 이상 사용되지 않는 new Character(c) 생성자)도 재현합니다. 모든 제안을 컴파일하고 사용 중단 경고를 읽으십시오.

이 게시물을 요약하면 다음과 같습니다.