정수 세 자리마다 쉼표(,)를 넣고 싶다면 어떻게 해야할까?
정수를 문자열로 변환한 다음 세자리, 씩 끊어서 쉼표를 넣을수있을것이다.
이작업은 코드가 지저분해진다
많은 수의 점수를 리스트화해서 출력할때 소수점 한자리로 일정하게 맞추어 출력하려면 어떻게 해야할까?
각점수에 10을 곱해서 정수화 하고, 다시 10.0 으로 나누어 소주점 한자리로 만드러야 한다
이작업도 코드가 지저분해보인다
날짜 역시 원하는 문자열로 출력하기 위해서는 Calendar로부터 년, 월, 일 , 시 ,분, 초 를 얻어 원하는 문자열로 조합하는 과정을 거쳐야한다.
자바 에서는 이러한 문제들을쉽게 해결할 수있는 방법을 제공
-> 형식 클래스
java.text 패키지에 포함되어있다
숫자 형식을 위해 DecimalFormat
날짜형식을 위해 SimpleDateFormat
매개변수화된 문자열 형식을 위해 MessageFormat 등을 제공
숫자 형식 클래스(DecimalFormat)
DecimalFormat은 숫자 데이터를 원하는 형식으로 표현하기 위해서 패턴을 사용
기호 | 의미 | 패턴 예 | 1234567.89 -> 변환결과 |
0 | 10진수(빈자리는 0으로 채움) | 0 0.0 000000000.00000 |
1234568 1234567.9 0001234567.89000 |
# | 10진수(빈자리는 채우지 않음) | # #.# ########.##### |
1234568 1234567.9 1234567.89 |
. | 소수점 | #.0 | 1234567.9 |
- | 음수 기호 | +#.0 -#.0 |
+1234567.9 -1234567.9 |
, | 단위 구분 | #,###.0 | 1,234,567.9 |
E | 지수 문자 | 0.0E0 | 1.2E6 |
; | 양수와 음수의 패턴을 모두 기술할 경우, 패턴 구분자 | +#,###;-#,### | + 1,234,568(양수 일때) - 1,234,568(음수 일때) |
% | 100을 곱한 후에 % 문자 붙임 | #,#% | 123456789% |
\u00A4 | 통화 기호 | \u00A4 $.$$$ | \1,234,568 |
적용할 패턴을 선택했다면 DecimalFormat 생성자 매객밧으로 지정해서 객체를 생성하면 된다.
그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.
DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(1234567.89);
날짜 형식 클래스 (SimpleDateFormat)
Date 클래스의 toString() 메소드는 영문으로된 날짜를 리턴하는데 만약 특정 문자열 포맷으로 얻고싶다면
java.text.SimpleDateFormat 클래스를 이용하면 된다.
SimpleDateFormat 클래스도 날짜를 원하는 형식으로 표현하기 위해서 패턴을 사용
패턴 문자 | 의미 | 패턴 문자 | 의미 |
y | 년 | H | 시(0~23) |
M | 월 | h | 시(1~12) |
d | 일 | K | 시(0~11) |
D | 월 구분이 없는 일(1~365) | k | 시(1~24) |
E | 요일 | m | 분 |
a | 오전/오후 | s | 초 |
w | 년의 몇번째 주 | S | 밀리세컨드(1/1000초) |
W | 월의 몇번쨰 주 |
패턴에는 자릿수에 맞게 기호를 반복해서 작성할 수 있다.
예를 들어 yyyy는 년도를 4자로 표시
MM, dd 는 각각 달과 일을 2자로 표시하라는 의미
적용할 패턴을 작성했다면
SimpleDateFormat 생성자 매개값으로 지정해서 객체를 생성하면 된다
그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
String strDate = sdf.format(new Date());
문자열 형식 클래스(MessageFormat)
데이터를 파일에 저장하거나, 네트워크로 전송할때, 데이터베이스 SQL문을 작성할 때
많은 부분에서 일정한 형식의 문자열을 사용
MessageFormat 클래스를 사용하면
문자열에 데이터가 들어갈 자리를 표시
프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성시킬 수 있다.
String result = "회원 ID: " + id + "\n회원 이름: " + name + "\n회원 전화: " +tel;
+ 연산자로 인해 복잡해 보이고, 전체 문자열 파악하기 힘든
String message = "회원 ID: {0}\n 회원 이름: {1} \n 회원 전화 : {2}";
String result = MessageFormat.format(message, id, name, tel);
MessageFormat 은 정적 format() 메소드를 호출해서 완성된 문자열을 리턴시킨다.
format() 메소드의 첫 번째 매개값은 매개 변수화된 문자열을 지정
두 번째 이후의 매개값은 인덱스 순서에 맞게 값을 나열 or 배열을 대입해도 된다 .
String message = "회원 ID: {0}\n 회원 이름: {1} \n 회원 전화 : {2}";
Object[] arguments = {id, name, tel};
String result = MessageFormat.format(message, id, name, tel);
'Back-end > 이것이 자바다[신용권 한빛미디어]' 카테고리의 다른 글
멀티 스레드 개념 (0) | 2021.11.22 |
---|---|
java.time 패키지 (0) | 2021.10.25 |
Date, Calender 클래스 (0) | 2021.10.24 |
Math, Random 클래스 (0) | 2021.10.24 |
Wrapper(포장) 클래스 (0) | 2021.10.24 |