java 에서 printf 상세 설명
21096 단어 ☀Java-------【JavaSE】
1. 단순 분석
System.out.printf(String format, Object ... args);
public final static PrintStream out = null;
을 받 고 유형 은 PrintStream 이다.public PrintStream printf(String format, Object ... args)
방법 을 호출 합 니 다.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;
}
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$][flags][width]conversion
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 진법 - 256o
integral
8 진법 으로 되 돌아 가기
x,X
integral
16 진법 으로 되 돌아 가기
f
floating
포맷 float
System.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$" 。 } }