본문 바로가기
Language/Java

[Java] char 배열을 문자열로 변환하기 / String 생성자, String.valueOf(), StringBuilder, Stream

by 키튼햄 2023. 10. 21.

앞서서 문자열(String)을 char배열로 한 글자씩 분리하는 방법에 대해 정리했었다.

이번에는 char 배열을 문자열로 변환하는 방법에 대해 정리해보고자 한다.

 


 

 

1. String 생성자

char 배열을 String 생성자의 인자로 넣으면 문자열로 변환되어 String 객체가 생성된다.

 

예시)

public void charArrayToString1() {
    char[] charArray = { 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' };
    String str = new String(charArray);
    System.out.println(str);
}


//출력
//HelloWorld

 

 

2. String.valueOf()

String.valueOf() 의 인자로 char[] 배열을 전달하면 문자열로 변환된 String 객체가 생성된다.

 

예시)

public void charArrayToString2() {
    char[] charArray = { 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' };
    String str = String.valueOf(charArray);
    System.out.println(str);
}


//출력
//HelloWorld

 

 

3. StringBuilder

String 객체는 변경이 불가능하다.(한 번 생성되면 내용을 바꿀 수가 없다는 뜻이다.)

따라서 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고 이전 문자열은 가비지 컬렉터로 들어간다. 이렇게 되면 메모리를 많이 잡아먹게 되는데 이때 사용할 수 있는 것이 StringBuilder이다.

StringBuilder는 변경 가능한 문자열을 만들어 주기 때문에 변경 불가한 문자열인는 String을 합치는 작업시 하나의 대안이 될 수 있다.

 

사용방법은 다음과 같다.

1.  먼저 StringBuilder 객체를 생성한다.

2.  .append()의 인자로 연결하고자하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출한다. (이때 append()는 여러개를 붙여도 된다.)

3.  출력하거나 String 변수에 넣기 위해서는  StringBuilder 참조변수에 .toString()을 붙이면 된다.

// String에 StringBuilder를 그대로 넣을 수는 없다. 꼭 StringBuilder의 참조변수 뒤에 .toString()을 붙여야 한다.

 

예시)

public void charArrayToString4(){
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("문자열 ").append("연결");
    
  //String str = stringBuilder;   //(X)
    String str = stringBuilder.toString();  //(O)
    
    // 두 println()은 같은 값을 출력한다
    System.out.println(stringBuilder);
    System.out.println(str);
}

//출력
/*
문자열 연결
문자열 연결
*/

 

반복문에서는 아래와 같이 사용할 수 있다.

import java.util.ArrayList;

public class Main{
    public static void main(String[] args){
        StringBuilder stringBuilder = new StringBuilder();
        ArrayList<String> list = new ArrayList<>();
        list.add("첫 번째, ");
        list.add("두 번째, ");
        list.add("세 번째, ");
        list.add("네 번째, ");
        list.add("다섯 번째");
        
        for (int i = 0; i < list.size(); i++){
            stringBuilder.append(list.get(i));
        }
        
        System.out.println(stringBuilder);
    }
}


//출력
//첫 번째, 두 번째, 세 번째, 네 번째, 다섯 번째

 

 

 

4. Stream

char[] 배열을 Stream을 이용해 String으로 변환하고 String들을 합쳐서 하나의 String으로 만들 수 있다.

 

*Stream을 사용할 때는 java.util.stream.Stream을 import해야 사용가능하다.

 

예시)

import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class practice {
    public static void main(String[] args){
    	Character[] charArray = { 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd' };
    	Stream<Character> charStream = Arrays.stream(charArray);
    	String str = charStream.map(String::valueOf).collect(Collectors.joining());
    	System.out.println(str);
    }
}


//출력
//HelloWorld

[설명]

1. Caracter 객체를 원소로 가지는 배열 `charArray`를 선언하고 초기화한다.

2. `Arrays.stream(charArray)`를 사용하여 `charArray` 배열을 Stream으로 변환한다. 이 스트림은 Character 객체를 원소로 갖는다.

3. charStream에 `.map(String::valueOf)`를 적용하여 각 Character 객체를 문자열로 변환한다.

4. `.collect(Collectors.joining())`를 사용하여 스트림의 모든 문자열을 하나로 결합한다.

Collectors.joining()  : 문자열 스트림을 연결하여 하나의 문자열로 만드는 역할

5. 최종적으로 str 변수에 `HelloWorld`라 문자열이 저장된다.

 

 

 

 


++

프로그래머스 문제를 푸니 문자열을 사용한 문제가 나온다. 계속 업데이트 할 예정

12948. 핸드폰 번호 가리기

 


참고