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 |