날아라쩡글이의 블로그입니다.

Formating (포맷팅) 본문

중앙 HTA (2106기) story/java API story

Formating (포맷팅)

날아라쩡글이 2021. 10. 8. 13:48
반응형
  • 숫자, 날짜, 문자를 일정한 포맷(형식, 패턴)의 텍스트로 바꾸는 것
  • 100000000   ->"100,000,000"으로 변환하고 싶음. 
  • 날짜를 "2021-10-08","2021년 10월 08일"로 변환하고 싶을 때 사용하는 API이다. 

Java API -> java.text ->DateFormat, SimpleDateFormat, MessageFormat, DecimalFormat이 존재한다. 

DateFormat

  • 시스템의 현재 날짜와 시간정보를 포함하고 있는 Date객체를 생성한다. 
  • Date date = new Date();
  • y M d E a H h m s S
    요일 오전/
    오후

    (0~23)

    (1~12)

    (0~59)

    (0~59)
    밀리초
    (0~999)
  • Date객체를 toString()으로 메소드를 반환하면   <Fri Oct 08 13:02:13 KST 2021>으로 출력이 된다. 그러나 이런 방법은 잘 사용하지 않는다. 
  • Date를 지정된 패턴의 문자열로 변환하고 싶다면, 
  • SimpleDateFormate simple = new SimpleDateFormat();으로 객체를 생성해도 할 수 있고, 생성자에 원하는 형태를 입력할 수 있다. 
    • 객체만 입력할 경우 simple.applyPattern("yyyy년 MM월 dd일 EEEE"); 로 원하는 패턴을 입력한다. 
    • String dateText1 = simple.format(date); //포맷에 date의 객체를 입력하고, String객체의 참조변수에 주소값을 입력한다. 
    • 그리고 출력한다. 
  • 생성자에 입력을 할 경우
    • SimpleDateFormate simple = new SimpleDateFormat("yyyy - MM -dd"); 처럼 변경하고 싶은 것과 동일하게 입력,
    • Date today = simple.format(simple);로 입력해주면된다. 
  • 문자열을 Date로 변경하는 방법
  • String text1 = "2021-10-08"
  • text1.replace("text1","");를 이용하여 빈칸으로 변환 후 Integer.parse();로 변하는 방법이 있다. 
  • 혹은 SimpleDateFormate을 new생성자로 만든 후 SimpleDateFormat참조변수.parse(text1); 변하는 방법이 있다. 
    • 그냥 사용하면 예외가 발생하게 된다. main으로 throws parseException으로 다시 던져 주면된다. 
    • unhandled exception type parseException의 예외처리가 나는데 
    • 사용자의 잘못된 사용으로 일어날 수 있다는 예외처리로 사용자가 입력날짜를 2월31일 ,13월 1일로 잘 못 입력할 수 있다고 대체할껀지에 대한 코드를 요청하는 것이라고 할 수 있다. throws parseException으로 예외객체를 던지는 메소드를 이용하여, 호출한 JVM에게 돌아가라고 명령하는 것이다. 
  • DateFormat의 역활
    1. 날짜를 원하는 text로 변환하는 방법
    2. 지정된 패턴을 읽어서 Date객체로 만드는 방법
    3. 내가 살아온 날짜도 계산할 수 있다. 

실제로는 날짜 DB에 있는 것은 Date로 획득하게 된다. 이미 패턴을 가진 상태로 가져올 수 있는데, 표현하는 순간 패턴을 바꿔서 클라이언트의 요구에 맞는 text로 생산해야한다. 어떻게 보여줄지는 클라이언트 서버상에서 출력되는 곳에서 결정될 것이다. 

날짜의 경우는 상품등록날짜, 날짜, 주문날짜, 게시글날짜, 댓글날짜 등 날짜와 관련정보가 많기 때문에 기호들을 외워두는 것이 좋다. 

DecimalFormat

  • 숫자(정수와 실수)를 지정된 패턴의 String으로 변환한다. 
  • 숫자형식의 Stirng을 숫자로 변환한다. 
  • 주요형식으로는 
    기호 0 # . ,
    설명 숫자 숫자 소숫점 자리수 구분
  • 정수나 실수를 지정된 패턴의 문자열로 변환할 경우 
    • DocimalFormat 참조변수 = new DecimalFormat("##,###");을 new연산자로 객체를 생성하여 매개변수 자리에 내가 표현하고싶은 형태로 입력을 한다. 
    • long amount = 1000000000L;
    • String text1 = 참조변수.format(amount);
    • 출력하게 되면 1,000,000,000으로 입력이 된다. 
    • 소수점도 동일하게 ("##,###.#") 소수점 한자리 수 , ("##,###.##") 소수점 두자리 수로 입력한다. 
    • 123.2400의 숫자 값으로 입력할 경우 값은 동일한데, ("##,###.####")이렇게 작성하면 뒤에 00자리는 출력되지 않는다. 100분의 1까지 밖에 계산하지 않은 느낌이 난다. ("##,###.0000")이렇게 출력하면 뒤에 00자리도 출력이 되기 때문에 10000분의 1까지 계산한 느낌이 들어서 정밀도를 높은 자리를 원할 경우 0이 생략되지 않게 만드는 것도 중요하다. 
  • 문자열을 숫자로 변경하기 
    • String text3 = "12,345,678"; 
    • DecimalFormat 참조변수 = new DecimalFormat("##,###"); 
    • Number number = 참조변수.parse(text3);  
    • Number은 Byte, Short, Integer, Long, Float, Double의 부모클래스로 반환타입은 Number로 지정해주어도 된다. 
    • 출력!

MessageFormat

  • text format시에 사용한다. 
  • 내부 정적 class를 입력후 private로 매개 변수를 입력하고, 생성자를 입력하고 getter/setter을 입력한다. 
  • main메소드에서 Score score = new Score("홍길동", 100, 80, 90);으로 정적클래스의 객체를 호출한 후, 매개변수 자리에 데이터를 넣는다. 
  • String pattern = "{0} 학생의 성적은 국어: {1}점, 영어: {2}점, 수학: {3}점, 평균점수: {4}점 입니다. ";
    • 내가 원하는 표시 형태, 홍길동 학생의 성적은 국어: 100점, 영어: 80점, 수학: 90점, 평균점수: 90점입니다. 
  • String  text =  MessageFormat.format (pattern,score.ge score.getName(),score.getKor(),score.getEng(),score.getMath(),score.getAverage());
  • System.out.println(text) 출력!
  • +기로 붙이지 않고 들어갈 자리를 표시하여 출력을 하였다. 
  • 배열에 있는 값도 넣을 수 있다. 
  • Object[] names = {"이순신", "김유신", "강감찬"} //Object로 데이터타입을 설정하지 않으면 노란색의 경고메세지가 나온다. 
  • MessageFormat 참조변수 = new MessageFormat("참석자 명단 : {0} 부장님, {1} 차장님, {2} 차장님");
  • String text2 = 참조변수.format(names); 
  • 혹은
  • String text3 = MessageFormat.format("참석자 명단 :{0} 부장님,{1} 차장님,{2} 차장님", names);으로 출력가능하다. 
  • new연산자로 객체를 생성하여 매개변수에 직접 입력하는 방법, 혹은 데이터타입을 작성하고 MesseageFormat.format의 메서드를 사용하여 직접적으로 입력하는 방법이 있다. 

가변길이 매개변수 

  • String MessageFormat.format(String pattern, Object ....arguments);을 사용한다. 
  • String MessageFormat.format(String pattern, Object[] ...arguments); //동일한 값이면 배열에 넣고 표시해도 된다. 
  • Object....arguments는 배열로 취급된다. 
  • ...이부분이 가변길이를 의미한다. 
  • 매개변수의 맨끝길이에 위치해야한다.중간에 위치할 수는 없다. 몇 개를 가지고 있는지 모르기 때문에  
  • Object의 값이 여러가지가 와도 된다.
  • 사용 하는 곳
    1. 값의 갯수가 정확하지 않을 때 
    2. 많을 때

MessageFormat을 사용하는 경우, 국제화 처리의 경우 영어와 일본어의 자리는 다르기 때문에 표시하고 싶은 값과 위치에 {  }, {  }입력을 해주면된다. 프로그래밍 언어마다 그 값이 들어갈 자리가 다르고, Spring의 유효성 체크, Form의 유효성 체크에서 입력값을 확인하고, 자체적으로 브라우저 언어를 읽어서 화면에 출력한다. 그때 사용을 많이 하게 된다. 

반응형

'중앙 HTA (2106기) story > java API story' 카테고리의 다른 글

I/O  (0) 2021.10.14
사용자 정의 예외 처리 , 앞으로 코딩 작성 방법(맨 밑)  (0) 2021.10.13
Random class  (0) 2021.10.08
java.util.유틸리티 클래스  (0) 2021.10.08
Map interface  (0) 2021.10.08
Comments