BOJ

[백준 9086번/JAVA] 문자열 | String.valueOf(), subString() | String.valueOf()와 toString()의 차이점

syj0522 2024. 3. 5. 22:08

 

문제

백준 9086번 문자열
문자열을 T번 입력받고, 각 문자열의 첫 글자와 끝 글자를 출력하는 문제이다.

풀이

  • 풀이 1) 입력받은 문자열의 first, last를 charAt()으로 추출한 후 String.valueOf()을 사용하여 문자열로 변환하여 출력
  • 풀이 2) 입력받은 문자열의 first, last를 부분 문자열인 substring()으로 추출하여 출력

코드

1. String.valueOf() 사용

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		
		st = new StringTokenizer(br.readLine());
		int T = Integer.parseInt(st.nextToken());
		
		for(int i=0; i<T; i++) {
			st = new StringTokenizer(br.readLine());
			String s = st.nextToken();
			String first = String.valueOf(s.charAt(0));
			String last = String.valueOf(s.charAt(s.length()-1));
			bw.write(first+last+"\n");
		}
		bw.close();
	}
}

2. subString() 사용

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		
		st = new StringTokenizer(br.readLine());
		int T = Integer.parseInt(st.nextToken());
		
		for(int i=0; i<T; i++) {
			st = new StringTokenizer(br.readLine());
			String s = st.nextToken();
			String first = s.substring(0, 1);
			String last = s.substring(s.length()-1);
			bw.write(first+last+"\n");
		}
		bw.close();
	}
}

Note

  • String.valueOf() 대신 StringBuilder 객체를 선언하여 sb.toString()을 사용하면 안 될까?
StringBuilder sb = new StringBuilder();
...
String first = sb.toString(s.charAt(0));
String first = sb.toString(s.charAt(s.length()-1));
  • 안 된다.
  • String.valueOf()는 기본 자료형 또는 객체를 문자열로 변환할 수 있기 때문에 char형을 String으로 변환 가능했다.
  • 하지만 toString()은 char타입을 인자로 받지 않는다. toString()메서드는 'Object'클래스를 상속받는 모든 클래스에서 사용 가능한데, 주로 오버라이딩되어 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 역할을 한다.
  • toString()이 사용된 코드 예시
public class Main {
    public static void main(String[] args){
        Car car = new Car();
        System.out.println(car.toString()); //순수 object값의 toString 결과값(의미없는 디폴트값)이 출력됨
    }	
}