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
Posted by Steven J.S Min
,