티스토리 뷰
숫자 및 문자 등 기본적인 데이터에 대한 형식화 클래스
Formatting | Parsing |
숫자 데이터를 패턴에 의해 형식화된 문자열로 표현 |
문자열을 지정된 패턴에 의해 숫자 데이터로 변환 |
format() 메서드 사용 |
parse() 메서드 사용 |
리턴 타입이 Number 타입이며, 기본적인 형식이 long 또는 double 이므로 주의! int 형으로 변환하거나 float 형으로 변환하면 예외 발생 |
DecimalFormat 클래스
- 숫자 데이터에 대한 형식화 클래스(DB에 있는 걸 엑셀로 받을 때 사용)
실수 1234.5를 1234.50000 형식으로 표현
정수 1234를 ₩1,234 형식으로 표현
- 기존 패턴에 새로운 패턴으로 교체하여 적용 => applyPattern() 메서드 사용
패턴 기호 문자
0 | 0 ~ 9 한자리 (값이 없으면 0으로 채움) |
# | 0 ~ 9 한자리 (값이 없으면 자리 제거) |
. | 소수점 기호 |
, | 1000 단위 자릿수 구분 (콤마 기호 뒤의 # 또는 0의 갯수마다 자동으로 표시) |
- | 음수 표시 |
E | 지수 표시 (잘 사용 안 함) |
1. 기본 데이터타입 숫자데이터 => 형식화된 문자열
double dNum = 1234.5;
// 형식 지정할 패턴 문자열
String pattern = "₩#,###.###"; // ₩1,234.5
// String pattern = "₩0,000.000"; // ₩1,234.500
// String pattern = "₩#,###.000"; // ₩1,234.500
DecimalFormat df = new DecimalFormat(pattern);
System.out.println(df.format(dNum));
2. 문자열에 대한 형식 지정 -> 기본데이터타입 숫자데이터로 바꾸기
=> DecimalFormat 클래스의 parse() 메서드 사용
throws ParseException 처리하고
DecimalFormat df = new DecimalFormat(pattern);
String strNum = df.format(dNum);
// 오토언박싱 활용 가능
double parsedNum = (double)df.parse(strNum);
System.out.println(parsedNum);
아래와 같이 사용 시 특수문자 포함으로 사용불가
double parsedNum = Double.parseDouble(strNum);
MessageFormat 클래스
- 문자열과 다른 기본타입 데이터 또는 객체 데이터를 연결하는 경우,
일반적으로 연결연산자(+)를 사용하지만 문자열 구조가 복잡해지는 문제가 발생한다.
- MessageFormat 클래스로 결합될 데이터를 변수처럼 사용하여
패턴을 적용하고, 문자열 결합을 간편하게 수행할 수 있다(printf()로 문자열 결합으로 출력하는 것과 유사)
String msgPattern = "이름 : {0}, 나이 : {1}, 주민번호 : {2}";
String name = "홍길동";
int age = 20;
String jumin = "901010-1234567";
String formatStr = MessageFormat.format(msgPattern, name, age, jumin);
System.out.println(formatStr);
Person 클래스와 생성자, get 메서드를 만들고 객체 생성!
class Person {
private String name;
private int age;
private String jumin;
// 생성자
public Person(String name, int age, String jumin) {
this.name = name;
this.age = age;
this.jumin = jumin;
}
// get 메서드
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getJumin() {
return jumin;
}
}
Person[] pArr = {
new Person("홍길동", 20, "901010-1234567"),
new Person("이순신", 33, "911111-1231223"),
new Person("강감찬", 41, "940124-1132447")
};
반복문 사용해 Person[] 배열을 반복하고,
각각 Person 객체 데이터를 MessageFormat 클래스의 format() 메서드에 전달해 형식 지정 출력
for(int i = 0; i < pArr.length; i++) {
Person p = pArr[i];
String formatStr2 = MessageFormat.format(msgPattern, p.getName(),p.getAge(),p.getJumin());
System.out.println(formatStr2);
}
// 향상된 for문
for (Person p : pArr) {
String formatStr2 = MessageFormat.format(msgPattern, p.getName(),p.getAge(),p.getJumin());
System.out.println(formatStr2);
}
'배운 것 기록 > java' 카테고리의 다른 글
Event (0) | 2022.07.20 |
---|---|
Swing (0) | 2022.07.18 |
자바 I/O - Input / Output (0) | 2022.07.13 |
BigInteger, BigDecimal 클래스 (0) | 2022.07.12 |
Formatting - SimpleDataFormat, DateTimeFormatter (0) | 2022.07.11 |
댓글