java.text.NumberFormat
NumberFormat 클래스는 추상 클래스로 숫자의 포맷을 지정할 때 사용하는 클래스이다. NumberFormat 클래스는 팩토리 패턴을 사용하여 작성된 클래스이기 때문에 'new' 연산자를 사용하여 객체를 생성 할 수 없고 getInstance()메소드를 사용하여 인스턴스를 얻는다.
NumberFormat 클래스로 표현할 수 있는 포맷의 종류는 다음과 같다.
- 정수형
- 통화 수치
- 퍼센트
각 포멧에 해당하는 NumberFormat 클래스를 생성할 때는 각 포멧에 해당하는 인스턴스 반환 메소드를 사용하는데 각 포멧에 따른 인스턴스 생성 메소드는 다음과 같다.
- 정수형: getIntegerInstance()
- 통화 수치: getCurrencyInstance()
- 퍼센트: getPercentInstance()
o 일반적인 NumberFormat 객체 생성 방법: NumberFormat nf = NumberFormat.getInstance();
o 정수형 객체 생성 방법: NumberFormat nf = NumberFormat.getIntegerInstance();
o 통화수치 객체 생성 방법: NumberFormat nf = NumberFormat.getCurrencyInstance();
o 퍼센트 객체 생성 방법: NumberFormat nf = NumberFormat.getPercentInstance();
다음과 같이 로케일을 적용할 수 있다.
double salary = 1234.56;
String here = NumberFormat.getCurrencyInstance().format(salary);
String italy = NumberFormat.getCurrencyInstance(Locale.ITALY).format(salary);
NumberFormat 클래스는 문자열을 파라미터로 사용하는 parse() 메소드를 사용하면 포맷이 적용되어 있는 문자열을 Number 객체로 반환할 수 있다. java.lang.Number 클래스는 BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short 클래스의 슈퍼 클래스로 데이터를 해당 자료형에 맞게 반환하는 메소드를 가지고 있다. (Number 클래스 API 참조)
다음 코드는 NumberFormat의 예제이다.
public class NumberFormatTest {
/** * @param args */ public static void main(String[] args) { try { NumberFormat format = NumberFormat.getInstance();
String normalString = "1000"; String decimalString = "1000.12"; String separatorString = "1,000";
// NumberFormat 클래스는 try catch 구문으로 항상 예외를 처리해야 한다. Number normal = format.parse(normalString); Number decimal = format.parse(decimalString); Number separator = format.parse(separatorString);
System.out.println("정수형 : " + normal); System.out.println("통화 : " + decimal); System.out.println("퍼센트 : " + separator);
// 정수형 테스트(소숫점을 버림) System.out.println("정수형 처리의 기본값은 : " + format.isParseIntegerOnly()); format.setParseIntegerOnly(true); normal = format.parse(decimalString); System.out.println("정수형 테스트 : " + normal + "(" + format.isParseIntegerOnly() + ")");
System.out.println("일반 숫자 : " + format.format(normal));
format = NumberFormat.getCurrencyInstance(); System.out.println("통화 :" + format.format(normal));
format = NumberFormat.getPercentInstance(); System.out.println("퍼센트 : " + format.format(normal));
} catch (Exception e) { e.printStackTrace(); }
}
} |
결과
정수형 : 1000
통화 : 1000.12
퍼센트 : 1000
정수형 처리의 기본값은 : false
정수형 테스트 : 1000(true)
일반 숫자 : 1,000
통화 :$1,000.00
퍼센트 : 100,000%
java.text.ChoiceFormat
ChoiceFormat은 특정 범위에 속하는 값을 문자열로 변환해준다. 연속적 또는 불연속적인 범위의 값들을 처리하는데 있어서 if문이나 switch문은 적절하지 못한 경우가 많다. 이럴때 ChoiceFormat을 잘 사용하면 복잡하게 처리될 수 밖에 없었던 코드를 간단하고 직관적으로 만들 수 있다.
그 외 에도 활용하기에 따라 if문과 switch문을 대신해서 다야한 용도로 유용하게 쓰일수 있으므로 잘 알아두도록 하자.
public class ChoiceFormatTest {
/** * @param args */ public static void main(String[] args) {
/** * limits : 낮은 값부터 큰 값의 순서로 적어야 한다.<br> * limit, greades간의 순서와 개수를 맞추어야 한다. */ double[] limits = { 60, 70, 80, 90 }; // String[] grades = { "D", "C", "B", "A" };
int[] scores = { 100, 95, 88, 70, 52, 60, 70 };
ChoiceFormat form = new ChoiceFormat(limits, grades);
for (int i = 0; i < scores.length; i++) { System.out.println(scores[i] + ":" + form.format(scores[i])); } }
}
|
배열대신 패턴형태로 구분를 사용하여 # , < 두가지 'limit#value'의 형태로 사용할 수 있는데
#은 경계값을 범위에 포함 하지만 <는 포함하지않는다 그래서 다음 패턴의 경우 80은 C등급으로 나온다.
String pattern = " 60#D | 70#C | 80<B | 90#A ";
다음 코드는 패턴을 사용한 ChoiceFormat의 예제이다.
public class ChoiceFormatTest {
/** * @param args */ public static void main(String[] args) { String pattern = " 60#D | 70#C | 80<B | 90#A "; int[] scores = { 99, 95, 88, 70, 52, 60, 70 };
ChoiceFormat form = new ChoiceFormat(pattern);
for (int i = 0; i < scores.length; i++) { System.out.println(scores[i] + "의등급은 : " + form.format(scores[i]) + "등급 입니다."); }
}
} |
결과
99의등급은 : A 등급 입니다.
95의등급은 : A 등급 입니다.
88의등급은 : B 등급 입니다.
70의등급은 : C 등급 입니다.
52의등급은 : D 등급 입니다.
60의등급은 : D 등급 입니다.
70의등급은 : C 등급 입니다.
java.text.DateFormat
DateFormat은 Date(날짜)를 위한 클래스이지 Calendar를 위한 클래스가 아니다. 그렇기 때문에 Format전에 Calender 로부터 Date( 날짜객체)를 얻어와야 한다.
DateFormat은 추상클래스이지만DateFormat가 가지고있는 Static 팩토리 메소드들이 있기때문에 이를 이용하여 Formater를 만들 수 있다. 대표적인 메소드로 다음과 같은 메소드 들이 있다.
· DateFormat.getInstance()
· DateFormat.getDateInstance()
· DateFormat.getTimeInstance()
· DateFormat.getDateTimeInstance()
DateFormat은 4가지 형태로 보여주는데
· DateFormat.SHORT
· DateFormat.MEDIUM
· DateFormat.LONG
· DateFormat.FULL
이 있는데 기본은DateFormat.DEFAULT이다. DEFAULT는 MEDIUM과 동일하다.
public class DateTest {
/** * @param args */ public static void main(String[] args) {
// DateFormat fmt = DateFormat.getInstance(); // "1/11/13 8:26 PM" // DateFormat fmt = DateFormat.getDateInstance(DateFormat.DEFAULT); // "01/11/2013" // DateFormat fmt = DateFormat.getTimeInstance(DateFormat.DEFAULT); // "8:29:54 PM" DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT); // "01/11/2013 8:29:54 PM" String now = fmt.format(new Date());
System.out.println(now); }
} |
국가별 DateFormat설정은 다음과 같이 Locale 파라미터를 추가하면 된다.
§ DateFormat fmt = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.KOREA);
§ DateFormat fmt = DateFormat.getTimeInstance(DateFormat.DEFAULT, Locale.ITALY);
§ DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.UK);
Printf-Style Date and Time Formatting
** System.out.printf의 date 와 time포멧터는 ‘t’ 또는 ‘T’를 따르는 Suffix 문자를 지정하는데 각 문자의 의미는 java.util.Formatter를 참조할 것.
public class DateTest {
/** * @param args */ public static void main(String[] args) { System.out.printf("The date is %tc\n", new Date()); System.out.printf(Locale.KOREA, "The date is %tc\n", new Date()); }
}
|
결과
The date is Fri Nov 01 20:47:47 EST 2013
The date is 금 11월 01 20:47:47 EST 2013
java.text.SimpleDateFormat
사용 할 수있는 문자 패터는 java.text.SimpleDateFormat 문서 참조
public class DateTest {
/** * @param args */ public static void main(String[] args) { // Asia/Seoul // Australia/Melbourne // Calendar today = GregorianCalendar.getInstance(); Calendar today = GregorianCalendar.getInstance(TimeZone.getTimeZone("Australia/Melbourne"));
//today에는 현재 날짜가 세팅되어있다.(2011년 10월 7일 11시) SimpleDateFormat dateprint = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); //dateprint라는 SimpleDateFormat 객체 선언 System.out.println(dateprint.format(today.getTime()));
//applyPattern이란 메소드로 포맷을 바꿀 수 있다. dateprint.applyPattern("yyyy-MM-dd"); System.out.println(dateprint.format(today.getTime())); dateprint.applyPattern("yyyyMMdd hh:mm:ss"); System.out.println(dateprint.format(today.getTime())); dateprint.applyPattern("yyyy MMMMM dd EEE"); System.out.println(dateprint.format(today.getTime()));
}
} |
결과
2013-11-01-21-18-29
2013-11-01
20131101 09:18:29
2013 November 01 Fri
'Java > Working with Text' 카테고리의 다른 글
java.util.Scanner (0) | 2013.10.31 |
---|---|
String과 StringBuffer, StringBuilder 비교 (0) | 2013.02.07 |