본문 바로가기
Language/Java

자바 String.charAt 을 String으로 받는 방법

by wakestand 2021. 10. 5.
반응형

자바를 이용한 알고리즘 문제 풀다가

자주 나오는 케이스인데

 

int 타입의 값을 받아서

배열 안에 넣고 적절한 로직을 수행한 뒤

반환하는 형식의 문제인데

 

int 형식의 값을 받아서 배열 안에 넣어주려면 

for 문을 돌리면서

한 글자씩 뽑아서 넣어줘야 한다

 

여기서 문제는 String을 이용한 글자 뽑기 방법이

CharAt / substring 밖에 없는데

substring의 경우에는 end index를 설정해야 해서

end index가 문자열 크기를 넘기게 설정하면 에러가 난다

즉 손이 많이 가서 쓰기 귀찮다는 말이다

 

반면 CharAt의 경우에는 한글자씩 뽑아올 수 있는건 좋은데

문제는 뽑은 값을 Character 타입으로 반환하기 때문에

이걸 또 String 타입으로 변환해서 사용해야 하는데

 

편하게 String 타입으로 전환한 뒤

한글자씩 배열에 넣어주려면

아래 방법을 따라해주면 된다

 

1. for문 돌리기

귀찮은 방법이지만 확실한 방법이기 때문에

for 문 돌리면서 한글자씩 CharAt으로 뽑아온 뒤

String.valueOf(CharAt한거) 로 한땀한땀 넣어주면 된다

 

2. split을 이용해 list에 바로 넣어버리기

String.split("")을 사용해주면 한글자씩 모두 분해할 수 있는데

위 값은 숫자이기 때문에

String.valueOf(값).split("")을 사용해주면

List 타입으로 한글자씩 분해가 된다

 

이걸 List에 넣어주면 되는데

ArrayList / LinkedList 등에는 들어가지 않기 때문에

List 선언 시에 주의가 필요하다

 

3. addAll을 이용해 list에 넣기

2번 방법은 List 타입에만 넣을 수 있는데

3번 방법은 list 타입으로 쪼개진 값을

 

addAll을 사용하면 파라미터를

Collection 타입(List가 상속하는 객체)으로 받아주기 때문에

List / ArrayList / LinkedList 등 아무 타입으로 넣어줘도

쉽게 add가 가능해진다

 

4. List 선언 시 생성자 파라미터로 넣어주기

List 선언 시 () 안에 list를 넣어주면

생성자에서 파라미터를 Collection 타입으로 받기 때문에

생성과 동시에 값을 넣어줄 수 있다 

이게 위 3방법보다 가장 편하기 떄문에

 

앞에서 미리 List를 선언한 후에

뭔가 사용할 일이 있는게 아니라면

그냥 선언과 동시에

생성자에서 삽입시키게 하는 방법이 가장 좋다

 

마지막으로 예제에 사용한 코드는 다음과 같다

 

public static void main(String[] args) {
	int number = 124223; // int 타입의 값
	List<String> list = new ArrayList<String>(); // String 타입 List
	ArrayList<String> aList = new ArrayList<String>(); // String 타입 List
	
	// 1. for문 돌리기
	for(int i = 0; i<String.valueOf(number).length(); i++) {
	// int 타입의 number를 String으로 만든 후 
	// charAt으로 Char타입으로 1글자 꺼내온 뒤 String으로 다시 변환
	list.add(String.valueOf(String.valueOf(number).charAt(i)));
	}
	
	// 2. split을 이용해 list에 바로 넣어버리기 (List로 선언 필요(array, linkedlist X))
	list = Arrays.asList(String.valueOf(number).split(""));
	
	// 3. addAll을 이용해 list에 넣기
	aList.addAll(Arrays.asList(String.valueOf(number).split("")));
	
	// 4. List 선언 시 생성자 파라미터로 넣어주기
	ArrayList<String> list2 = new ArrayList<String>(Arrays.asList(String.valueOf(number).split("")));
}
반응형

댓글