java 에서 printf 상세 설명

  • 간단 한 분석
  • Formatter 류 소개 및 사용
  • 매개 변수의 용법 을 구체 적 으로 소개 한다.
  • 상용 조작 부호
  • 시간, 날짜 클래스
  • DateTime
  • Date
  • 포맷 된 형식 을 직접 사용 할 수 있 습 니 다
  • Flag
  • 날짜 의 예시
  • 숫자의 예시


  • 1. 단순 분석
    System.out.printf(String format, Object ... args);
  • 먼저 System 을 통 해 정적 대상 public final static PrintStream out = null; 을 받 고 유형 은 PrintStream 이다.
  • PrintStream 의 public PrintStream printf(String format, Object ... args) 방법 을 호출 합 니 다.
  • printf 방법 내부 호출 public PrintStream format(String format, Object ... args) 방법.format 방법의 내부 실현 을 보 세 요.
  • public PrintStream format(String format, Object ... args) {
            try {
                synchronized (this) {
                    ensureOpen();
                    if ((formatter == null)
                        || (formatter.locale() != Locale.getDefault()))
                        formatter = new Formatter((Appendable) this);
                    formatter.format(Locale.getDefault(), format, args);
                }
            } catch (InterruptedIOException x) {
                Thread.currentThread().interrupt();
            } catch (IOException x) {
                trouble = true;
            }
            return this;
        }
  • Formatter 류 의 format (Locale l, String format, Object... args) 방법 으로 포맷 한 것 을 알 수 있 습 니 다.

  • 2. Formatter 클래스 소개 및 사용
    Formatter 시스템
    public final class Formatter
        extends Object
        implements Closeable, Flushable

    printf 스타일 형식의 문자열 해석 기 입 니 다.Formatter 는 숫자, 문자열, 날짜/시간 데이터 등 을 포맷 하여 특정한 형식 으로 출력 할 수 있 습 니 다.Formattable 인 터 페 이 스 를 통 해 임의의 사용자 형식 에 사용 할 제한 포맷 맞 춤 형 제작 을 제공 합 니 다.다 중 스 레 드 접근 에 있어 서 포맷 기 가 반드시 안전 한 것 은 아 닙 니 다.스 레 드 안전 은 선택 할 수 있 고 본 과정 에서 사용자 의 책임 입 니 다.
    자바 언어의 포맷 인쇄 는 C 의 printf 의 큰 깨 우 침 을 받 았 다.형식 문자열 은 C 와 유사 하지만 자바 언어 에 적응 하고 일부 기능 을 이용 하기 위해 사용자 정의 가 진행 되 었 습 니 다.또한 자바 포맷 은 C 보다 엄격 합 니 다.예 를 들 어 표지 와 호 환 되 지 않 으 면 이상 을 던 집 니 다.C 에서 적용 되 지 않 는 플래그 가 무시 되 었 습 니 다.따라서 형식 문자열 은 C 프로그래머 에 의 해 식별 되 는 것 을 목적 으로 하지만 C 의 문자열 과 완전히 호 환 되 는 것 은 아니다.
    //Examples for expected usage:
    //           :
       @Test
        public void formatter_test(){
            StringBuilder sb = new StringBuilder();
            // Send all output to the Appendable object sb
            // StringBuilder    Formatter,      StringBuilder
            Formatter formatter = new Formatter(sb, Locale.CHINA);
    
    
            // Explicit argument indices may be used to re-order output.
            //        ,4$        
            formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");
            // -> " d  c  b  a"
    
            // Optional locale as the first argument can be used to get
            // locale-specific formatting of numbers.  The precision and width can be
            // given to round and align the value.
            //locale                。
            formatter.format(Locale.FRANCE, "
    e = %+10.4f"
    , Math.E); // -> "e = +2,7183" // The '(' numeric flag may be used to format negative numbers with // parentheses rather than a minus sign. Group separators are // automatically inserted. //( 。 , formatter.format("
    Amount gained or lost since last statement: %(,.2f"
    , -1.7890); System.out.println(sb); // d c b a // e = +2,7183 // Amount gained or lost since last statement: (12,345.79) }

    시간 포맷 예제 다시 보기:
        @Test
        public void calendar_test(){
            Calendar c = Calendar.getInstance();
            String s = String.format("Today :%1$tm %1te,%1$tY",c);
            System.out.println(s);
            //output:Today :04 10,2017
        }
    "Today :%1$tm %1te,%1$tY" 꼬치 는 format 방법의 첫 번 째 매개 변수 입 니 다.이것 은 세 개의 형식 설명자 인 '% 1 tm', '% 1 te', '% 1 tY' 를 포함 하고 있 습 니 다. 매개 변 수 를 어떻게 처리 하 는 지, 텍스트 에 어떤 인 자 를 삽입 해 야 하 는 지, 숫자 + 는 몇 번 째 변 수 를 표시 합 니 다. tm te tY 는 날 짜 를 가 져 오 는 flag 입 니 다.형식 문자열 의 나머지 부분 은 고정 텍스트 입 니 다.매개 변수 목록 은 형식 문자열 에 전 달 된 방법의 모든 매개 변수 로 구성 되 어 있 습 니 다.위의 예 에서 매개 변수 목록 의 크기 는 1 이 고 Calendar 대상 c 로 구성 되 어 있 습 니 다.
    표준 형식 쓰기:
     %[argument_index$][flags][width][.precision]conversion
  • argument_index 는 매개 변수 목록 의 위 치 를 나타 내 는 10 진 정수 입 니 다.첫 번 째 매개 변 수 는 '1', 두 번 째 는 '2' 등 이다.
  • flags 는 출력 형식 을 수정 하 는 문자 입 니 다.
  • width 는 출력 에 쓸 최소 문자 수 를 나타 내 는 정 10 진 정수 입 니 다.
  • precision 은 보통 문자 수 를 제한 하 는 비 마이너스 십 진법 정수 에 사용 된다.

  • * * 날짜 와 시간 에 대한 형식 은 특수 합 니 다.
    %[argument_index$][flags][width]conversion
  • 표현 식 을 바 꾸 는 것 은 두 글자 입 니 다.첫 번 째 문 자 는 't' 또는 'T' 입 니 다.두 번 째 문 자 는 예제 의 meY 등 사용 할 형식 을 표시 합 니 다
  • .
    3. 매개 변수의 용법 을 구체 적 으로 소개 한다.
    상용 조작 부호
    b 출력 false, 대문자 b 를 사용 하면 FALSE 를 출력 합 니 다. 대문자 방식 은 대문자 변환 에 해당 합 니 다.
    기호.
    분류 하 다.
    묘사 하 다.
    예시
    b,B
    통용한다
    들 어 오 는 매개 변 수 는 값 이 있 으 면 true 를 인쇄 하고 null 에 false 를 되 돌려 줍 니 다.System.out.printf("%1$b",null);//false System.out.printf("%1$b","hello");//true
    h,H
    통용한다
    null 이면 null 을 인쇄 합 니 다. 그렇지 않 으 면 hashCode 의 16 진수 로 돌아 갑 니 다.System.out.printf("%1$h","hell");//30cf3d System.out.printf("%1$h",null);//null
    s,S
    통용한다
    null 이면 null 을 인쇄 합 니 다. 그렇지 않 으 면 arg. toString 으로 돌아 갑 니 다.system.out.printf("%1$s","hell");//hell
    d
    integral
    10 진수 되 돌리 기System.out.printf("%1$d",0100);// -64 System.out.printf(“%1$d”,0x100);//16 진법 - 256
    o
    integral
    8 진법 으로 되 돌아 가기
    x,X
    integral
    16 진법 으로 되 돌아 가기
    f
    floating
    포맷 floatSystem.out.printf("%1$.2f",100.1234555);//100.12, 2 는 몇 개의 소 수 를 보류 하고 기본적으로 5 개 를 보류한다.System.out.printf("%1$5.2f",1.1);// 1.10, 5 는 적어도 다섯 글자 가 표시 되 고 1.1 이 5 글자 가 안 되면 출력 " 1.10", 소수점 이 딱 다섯 개 라 는 뜻 이다.
    t,T
    date/time
    시간 형식
    소개
    %
    percent
    반환% 번호System.out.printf("%f%%", 1.0/3);
    출력 0.333333%. |n | line Separator | 줄 바 꾸 기 | System. out. printf ("hello% ninfo");helloinfo|
    시간 날짜 클래스
    (t/T 추가 하 는 것 을 잊 지 마 세 요. 예 를 들 어 System.out.printf("%1$tH",new Date());Date/Time
    conver
    des
    H
    24 시간, i. e 00 - 23
    I
    12 시간, i. e 01 - 12
    k
    24 시간, i. e 0 - 23
    l
    12 시간, i. e 1 - 12
    M
    분 i. e 00 - 59
    S
    초 i. e 00 - 60
    L
    밀리초 i. e 000 - 999
    N
    나 초 i. e 0000000 - 99999999
    p
    오전 오후 i. e am pm
    s
    유 닉 스 타임 스탬프, 1970 00: 00: 00 시작 범위: Long. MinVALUE/1000 - Long.MAX_VALUE/1000;
    Q
    밀리초 1970 00: 00 부터 시작, 범위: Long. MINVALUE - Long.MAX_VALUE;
    Date
    conver
    des
    B
    월 전체 영어 이름. "January", "February".
    b
    월 영어 줄 임 말, 예 를 들 면, "Jan", "Feb".
    h
    Same as ‘b’.
    A
    일요일
    a
    요일 의 영문 줄 임 말, 예 를 들 면 "Sun", "Mon"
    ‘C’
    년도/100, 2017 년 은 20, i. e. 00 - 99
    ‘Y’
    네 분 의 연도, 예: 2017
    ‘y’
    두 분 의 연도, 예 를 들 면 17 i. e. 00 - 99.
    ‘j’
    일년 중 며칠 째, 예 를 들 면 001 - 366
    m | 몇 달 째, i. e. 01 - 13. (공식 문서 작성 13) | d | 1 월 중 며칠 째, i. e. 01 - 31 | | e | 1 월 중 며칠 째, i. e. 1 - 31 | |
    직접 사용 할 수 있 는 포맷 된 형식 이 있 습 니 다.
    conver
    des
    R
    24 시간 으로 포맷 하면 '% tH:% tM', 예 를 들 어 16: 16 에 해당 합 니 다.
    T
    24 시간 으로 포맷 하면 '% tH:% tM:% tS', 예 를 들 어 16: 16: 29 에 해당 합 니 다.
    r
    12 - hour 로 포맷 하면 '% tI:% tM:% tS% Tp', e. g 04: 16: 06 오후
    D
    '% tm/% td/% ty, e. g. 04/10/17' 에 해당 합 니 다.
    F
    '% tY -% tm -% td', 예 를 들 면 2017 - 04 - 10
    c
    '% ta% tb% td% tT% tZ% tY', 예 를 들 어 'Sun Jul 20 16: 17: 00 EDT 1969' 에 해당 합 니 다.
    Flag
    Flag
    General
    Character
    Integral
    Floating Point
    Date/Time
    Description
    ‘-‘
    y
    y
    y
    y
    y
    결 과 는 왼쪽으로 정렬 됩 니 다.
    ‘#’
    y
    -
    y
    y
    -
    출력 에 플래그 비트 가 있 는 수, 예 를 들 어 System.out.printf("%1$#x",100);//0x 64
    ‘+’
    -
    -
    y
    y
    -
    출력 기호 수
    ‘0’
    -
    -
    y
    y
    -
    없 는 것 은 0 으로 자 리 를 차지한다. System.out.printf("%1$06.2f",1.12345);//001.12‘,’
    -
    -
    y
    y
    -
    숫자 를 쉼표 로 구분 하면 보기 편 하 다 System.out.printf("%1$,.2f",12345.12345);//12,345.12‘(‘
    -
    -
    y
    y
    -
    결과 가 음수 라면 괄호 로 묶 고 정 수 는 괄호 가 없다 System.out.printf("%1$(,.2f",-12345.12345); (12, 345.12)
    날짜 의 예시
    // %t           ,%T          , %t                 
    Date date = new Date();
    long dataL = date.getTime();
    //       
    // %t   y         (2    , 99)
    // %t   m         ,%t   d         
    System.out.printf("%1$ty-%1$tm-%1$td; %2$ty-%2$tm-%2$td%n", date, dataL);
    // %t   Y         (4    ),
    // %t   B             , %t   b            
    System.out.printf("%1$tY-%1$tB-%1$td; %2$tY-%2$tb-%2$td%n", date, dataL);
    
    //           
    // %t   D    "%tm/%td/%ty"     
    System.out.printf("%1$tD%n", date);
    //%t   F   "%tY-%tm-%td"     
    System.out.printf("%1$tF%n", date);
    
    /***       ***/
    //      
    // %t   H        (24  ),%t   I        (12  ),
    // %t   M        ,%t   S        
    System.out.printf("%1$tH:%1$tM:%1$tS; %2$tI:%2$tM:%2$tS%n", date, dataL);
    // %t   L            
    System.out.printf("%1$tH:%1$tM:%1$tS %1$tL%n", date);
    // %t  p              
    System.out.printf("%1$tH:%1$tM:%1$tS %1$tL %1$tp%n", date);
    //           
    // %t   R   "%tH:%tM"     
    System.out.printf("%1$tR%n", date);
    // %t   T   "%tH:%tM:%tS"     
    System.out.printf("%1$tT%n", date);
    // %t   r   "%tI:%tM:%tS %Tp"     
    System.out.printf("%1$tr%n", date);
    
    /***     ***/
    // %t   A          
    System.out.printf("%1$tF %1$tA%n", date);
    // %t   a          
    System.out.printf("%1$tF %1$ta%n", date);
    
    //            
    System.out.printf("%1$tc%n", date);

    숫자의 예시
    double d = 345.678;         
    String s = '  !';        
    int i = 1234;         //'%'         ,'%'           。       
    System.out.printf('%f',d); //'f'          。       
    System.out.println();         
    System.out.printf('%9.2f',d); //'9.2'  9       ,2         。       
    System.out.println();         
    System.out.printf('%+9.2f',d); //'+'          。       
    System.out.println();         
    System.out.printf('%-9.4f',d); //'-'         (      )。       
    System.out.println();         
    System.out.printf('%+-9.3f',d); //'+-'              。   
    System.out.println();         
    System.out.printf('%d',i); //'d'         。       
    System.out.println();         
    System.out.printf('%o',i); //'o'         。       
    System.out.println();         
    System.out.printf('%x',i); //'d'          。       
    System.out.println();         
    System.out.printf('%#x',i); //'d'               。      
    System.out.println();         
    System.out.printf('%s',s); //'d'       。       
    System.out.println();         
    System.out.printf('       :%f,    :%d,     :%s',d,i,s);        //        ,    。       
    System.out.println();         
    System.out.printf('    :%2$s,%1$d      :%1$#x',i,s);      //'X$'       。       }    。          
    System.out.println();           
    System.out.printf('%9.2f',d);//'9.2'  9       ,2         。         
    System.out.println();           
    System.out.printf('%+9.2f',d); //'+'          。         
    System.out.println();           
    System.out.printf('%-9.4f',d);//'-'         (      )。
    System.out.println();           
    System.out.printf('%+-9.3f',d); //'+-'              。   
    System.out.println();  
    System.out.printf('%d',i); //'d'         。         
    System.out.println();           
    System.out.printf('%o',i); //'o'         。         
    System.out.println();           
    System.out.printf('%x',i); //'d'          。         
    System.out.println();           
    System.out.printf('%#x',i); //'d'               。         System.out.println();           System.out.printf('%s',s); //'d'       。         System.out.println();           System.out.printf('       :%f,    :%d,     :%s',d,i,s);          //        ,    。         
    System.out.println();           
    System.out.printf('    :%2$s,%1$d      :%1$#x',i,s);          //'X$'       。         }          }           
    
    //      ,       。         
    double d = 345.678;          
    String s = "  !";          
    int i = 1234;           //"%"         ,"%"           。         
    System.out.printf("%f",d);//"f"          。         
    System.out.println();           
    System.out.printf("%9.2f",d);//"9.2"   9       ,2         。         System.out.println();           
    System.out.printf("%+9.2f",d);//"+"           。         
    System.out.println();           
    System.out.printf("%-9.4f",d);//"-"          (      )。         
    System.out.println();           
    System.out.printf("%+-9.3f",d);//"+-"               。 
    System.out.println();           
    System.out.printf("%d",i);//"d"         。         
    System.out.println();           
    System.out.printf("%o",i);//"o"         。         
    System.out.println();           
    System.out.printf("%x",i);//"d"          。         
    System.out.println();           
    System.out.printf("%#x",i);//"d"                。   
    System.out.println();  
    System.out.printf("%s",s);//"d"       。         
    System.out.println();           
    System.out.printf("       :%f,    :%d,     :%s",d,i,s);          //        ,    。         
    System.out.println();           
    System.out.printf("   :%2$s,%1$d      :%1$#x",i,s);          //"X$"       。         }          }

    좋은 웹페이지 즐겨찾기