티스토리 뷰
[JAVA] 문자열을 쉽고 능숙하게 다루는 방법 / String to Integer 쉽게 하는 방법 ParseInt / SubString
YouJungJang 2023. 11. 3. 15:32
0. 들어가기 전
나는 문제를 풀다가 사소한 문자열이나 배열 같은 간단한 자료 구조를 다루는 것에서
막혀서 다루는 방법을 '검색'하는 것에 많은 시간을 쏟곤 한다.
기업 코딩 테스트를 준비하기 전 여러 가지 다양한 코딩 문제들을 풀어봐야 하는 이유는 다름 아닌
하나의 태스크에 대해서 얼마나 쉽고 간단한 메서드를 사용할 수 있는지 연습할 수 있기 때문인 것 같다.
앞으로 더 많은 문제들을 접하면서 이러한 검색 시간을 최대로 단축하고
그 문제의 본질과 알고리즘에만 집중할 수 있는 날이 하루빨리 오길 바란다. (파이팅)
1. 파싱 사용 전
이번에 다룰 것은 String을 Integer로 쉽게 변환하는 방법이다. 바로 ParseInt와 SubString이다.
이는 바로 직전에 올린 카카오의 '개인 정보 수집 유효 기간'의 정석 풀이법을 찾아보면서 알아낸 유용한 메서드이다.
해당 문제는 날짜를 비교하는 문제인데, 비교는 정수를 사용해야지!라고 첫 순간에 생각이 들었다.
그런데 웬걸, 들어오는 입력값은 모두 String이나 String 배열이다.
그럼 귀찮지만 문자열을 정수로 변환해야겠다. 그런데 당시 내가 알고 있는 변환 메서드는 없었다.
그래서 내가 사용한 방법은 바로 주먹 구구식으로 '하나하나 직접 charAt으로 뽑아내 변환하기'였다.
내가 해당 문제에서 문자열 -> 정수로 변환할 때 사용했던 코드를 보자.
[ Today (오늘 날짜) 문자열을 연도 / 월 / 일 변수에 각각 정수로 변환해서 저장하기 ]
String today = "2022.05.19";
//[0] today 년, 월, 일 분리하기
int t_year = (today.charAt(0)-'0')*1000 + (today.charAt(1)-'0')*100 + (today.charAt(2)-'0')*10 + (today.charAt(3)-'0');
int t_month = (today.charAt(5)-'0')*10 + (today.charAt(6)-'0');
int t_day = (today.charAt(8)-'0')*10 + (today.charAt(9)-'0');
이 방법을 Privacies 문자열 배열에서도 사용해서 똑같이 정수로 하나하나 변환해 사용했는데
하나하나 쓰면서도 이게 맞나 싶었다. 하지만 이걸 쉽게 변환해 주는 메서드가 있는지 몰랐던 나는 열심히 고생할 수밖에 없었다..
그럼 이제 String을 Integer로 쉽게 바꿔보자!
2. ParseInt
Integer.parseInt(String s)
- Integer 클래스의 static 함수로 문자열 s를 숫자로 변환시켜 준다.
- Int 뿐만 아니라 byte, short, long, double, float 등 숫자와 관련된 타입은 전부 가능하다.
Byte.parseByte();
Short.parseShort();
Integer.parseInt();
Long.parseLong();
Float.parseFloat();
Double.parseDouble();
- 이때 string에는 순수한 숫자만 들어가야 한다. 예시로 '123a' 이런 식으로 숫자에 알파벳이 껴있으면 사용할 수 없다.
예시 코드
-ParseInt 사용 전
String number1 = new String("1234");
String number2 = new String("4321");
System.out.println(number1 + number2);
결과: "12344321"
문자열끼리 더하는 것이므로 두 문자열이 이어진 형태가 출력된다.
-ParseInt 사용 후
String strNum1 = new String("1234");
String strNum2 = new String("4321");
int num1 = Integer.parseInt(strNum1);
int num2 = Integer.parseInt(strNum2);
System.out.println(num1 + num2);
결과: 5555
파싱 함수를 써주니 결과는 두 문자열을 정수로 변환해 '더하기'한 값인 5555가 출력된다.
참고 자료:
3. 적용해 보기
그럼 이제 parseInt 함수를 사용해서 내 코드를 수정해 보자.
수정 전
int t_year = (today.charAt(0)-'0')*1000 + (today.charAt(1)-'0')*100 + (today.charAt(2)-'0')*10 + (today.charAt(3)-'0');
int t_month = (today.charAt(5)-'0')*10 + (today.charAt(6)-'0');
int t_day = (today.charAt(8)-'0')*10 + (today.charAt(9)-'0');
수정 후
int t_year = Integer.ParseInt(today.substring(0,4));
int t_month = Integer.ParseInt(today.substring(5,7));
int t_day = Integer.parseInt(today.substring(8,10));
여기서 ParseInt 함수 외에 substring 함수를 사용하면 today 문자열에서 연도, 월, 일을 index로 끊어서 분리할 수 있다.
4. Substring
substring 함수는 매개 변수 개수( 한 개 혹은 두 개)에 따라서 두 종류로 나눌 수 있다. 둘 다 string 문자열에서 원하는 부분을 추출해 온다는 것은 동일하다.
String substring(int index)
먼저 인자값을 하나만 받는 경우에는 목표 문자열에서 매개 변수인 index부터 끝까지 가져오는 것이다.
String str= "0123456789";
위와 같은 예시 문자열이 있다고 해보자. 여기서 '789'만 추출하고 싶을 때,
문자 7의 index는 7이니까 str.substring(7) 이렇게 작성하면 '789'가 추출된다.
만약 마지막 중간 부분을 추출하고 싶다면 마지막 index도 지정할 수 있는 아래 함수를 사용한다.
String substring(int beginindex, int endIndex)
위의 str에서 '456'을 추출하고 싶다면 4의 index인 4를 beginIndex,
그리고 endIndex에서는 마지막 숫자인 6의 index가 아닌 해당 인덱스 +1을 endIndex로 지정해준다.
즉 6의 index인 6에 +1을 한 7을 사용해서 str.substring(4,7) 이렇게 작성하면 된다.
참고 자료:
'Study > JAVA' 카테고리의 다른 글
[JAVA] SW Expert Academy #2001 파리 퇴치 문제 풀이 | ArrayList | 완전 탐색 (0) | 2023.11.16 |
---|---|
[JAVA] SW Expert Academy #1961 숫자 배열 회전 풀이 | ArrayList | 2차원 배열 (0) | 2023.11.16 |
[JAVA] SW Expert Academy #18662 등차수열 만들기 문제 풀이 (0) | 2023.11.16 |
[JAVA] 백준 #4358 생태학 문제 풀이 | HashMap | TreeMap | Buffered Reader (0) | 2023.11.16 |
[JAVA] 2023 KAKAO Blind Recruitment 개인정보 수집 유효 기한 문제 풀이 / 프로그래머스 17번 반례 (1) | 2023.11.02 |