String에 char 값을 추가할 때 null 값이 함께 저장되는 문제 해결

김성수·2023년 8월 12일
0

Java

목록 보기
15/18

알고리즘을 풀면서 String에 문자들을 차례대로 저장해야하는 순간이 있다.(ex) 백준 1755 숫자놀이)
그때 문자들을 차례대로 더해서 최종적으로 String에 저장된 값을 출력해보면 null값이 추가되는 경우가 있다.
그때 해결 방법을 기록해본다.

String tmp = "";
package boj;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class BOJ_1755_숫자놀이_김성수 {
    static BufferedReader br;
    static StringBuilder sb;

    // 입력 가능한 숫자는 1 ~ 99이므로 100으로 고정
    static final int numListSize = 100;

    // M ~ N까지의 정수를 저장할 리스트
    static String[] numList;

    static int N, M;
    public static void main(String[] args) throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine().trim());

        // M과 N을 입력한다.
        M = Integer.parseInt(st.nextToken());
        N = Integer.parseInt(st.nextToken());

        // 숫자 정보를 key-value 형태로 저장한다.(HashMap)
        // 1 -> one
        // 2 -> two
        HashMap<Integer, String> numChangedText = new HashMap<>();

        // numChangedText 초기화
        numChangedText.put(1, "one");
        numChangedText.put(2, "two");
        numChangedText.put(3, "three");
        numChangedText.put(4, "four");
        numChangedText.put(5, "five");
        numChangedText.put(6, "six");
        numChangedText.put(7, "seven");
        numChangedText.put(8, "eight");
        numChangedText.put(9, "nine");
        numChangedText.put(0, "zero");

        // M ~ N까지의 숫자를 저장할 리스트
        numList = new String[numListSize];

        // M ~ N까지 숫자를 numList에 저장한다.
        for(int num = M; num <= N; num++){
            // 숫자가 10보다 작을 떄는 한자리이므로 숫자에서 문자로 변환된 값을 numList에 저장해준다.
           if(num < 10){

               numList[num] = numChangedText.get(num);
           }else if(num >= 10){ // num이 10보다 같거나 클 때는 앞자리부터 문자로 변환해서 저장해줘야 한다.
               // num을 String 형태로 변환한다.
               String tmp = String.valueOf(num);

               String tmpStr = new String();

               // 변환된 tmp 값의 앞 문자부터 numList의 해당 num 인덱스에 저장해준다.
               for(int tmpCharIdx = 0; tmpCharIdx < tmp.length(); tmpCharIdx++){
                   int numTmp = tmp.charAt(tmpCharIdx) - '0'; // 문자를 숫자로 변환한다
                   tmpStr += numChangedText.get(numTmp);
               }
               numList[num] = tmpStr; // 숫자로 변환한 문자에 매핑된 값을 numList에 저장해준다.
           }
        }

        for(String str : numList){
            if(str != null){
                System.out.println(str.trim());
            }
        }

    }
}

위 코드에서 보면 tmpStr을 new String()으로 초기화 시켜줬다. 이 때는 null 값이 출력되지 않는다.

하지만 String tmpStr = "";로 초기화해놓으면 null값이 함께 출력된다.

처음 초기화할 때 공백을 함께해서 저장하기 때문이다.

profile
깊이 있는 소프트웨어 개발자가 되고 싶습니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 12일

좋은 글 감사합니다.

답글 달기