Memories in SeoK

기억하고 싶은 것들, 기억해야 하는 것들

개발/자바 Java

[Java 초급] printf 메서드 서식 지정자

Seo K 2024. 5. 14. 21:40

주로 print(), println() 메서드를 사용하기 때문에 사용법을 잘 까먹게 된다

변수를 특정 형식에 맞춰 (formatting) 출력해야 할 때 printf() 메서드를 사용하면 편하다

"형식 문자열" 뒤에 입력할 값을 파라미터로 이어 넣어주면 되고, "문자열"에 있는 서식 지정자 개수보다 파라미터 변수의 개수가 많거나 같으면 정상 동작한다

printf( "[서식 지정자를 포함한 형식 문자열]", [파라미터1], [파라미터2], ... );

다양한 서식 지정자

  • %% (Escape 문자 '%' 출력)
  • %n, \n (줄 바꿈)
  • %s (문자열)
    %5s (문구 앞에 공백을 채워서 5자리로 고정)
    %-2s (문구 뒤에 공백을 채워서 2자리로 고정)
    %.3s (3자리 이후 문자를 잘라냄)
    공백 외에 다른 문자로 채우는 방법과 문자열의 앞부분을 자르는 방법은 못 찾음
  • %d (정수)
  • %f (소수)
    %,f (자릿수 구분 기호 추가)
    %.2f (소수부를 2자리로 고정, 설정한 자릿수가 더 크면 0으로 채우고, 더 적으면 뒤에서 반올림 후 자른다)
    %05.1f (소수부 1자리, 정수부 앞에 0을 채워서 전체 5자리 보장 (= 최소 5자리), 정수부는 최소 3자리가 될 것이다)
    %-4.2f (소수부 2자리, 소수부 뒤에 공백을 채워서 전체 4자리 보장)
    소수부 설정이 없으면 6자리로 출력한다
    전체 자릿수에는 자릿수 구분 기호와 (',') 소수점 ('.') 기호를 포함한다
    전체 자릿수를 초과하더라도 정수부는 잘리지 않는다
    0과 하이픈은 ('-') 동시 입력 불가하다
    공백, 0 외에 다른 문자로 채우는 방법은 못 찾음
  • %b (논리)
    "True" / "False"로 출력
  • %c (문자)
  • %o (8진수)
  • %x, %X (16진수)
  • %e, %E (지수)
    "1.234e+05" 같은 형식으로 출력
// temurin openJDK 21

String name = "홍길동", s = "dksak";
int age = 20;
double h = 180.55, d = 18177.881;
System.out.printf( "이름: %s, 나이: %d세, 키: %.1fcm\n", name, age, h);
//이름: 홍길동, 나이: 20세, 키: 180.6cm

System.out.printf( "%%//%s//%8s//%-9s//%.2s//%.8s//%n", s, s, s, s, s);
//%//dksak//   dksak//dksak    //dk//dksak//
// 문자열 자릿수 맞추기 (공백) / 문자열 자르기
System.out.printf( "%8s//%-9s//%.2s//%n", name, name, name, name, "안마");
//     홍길동//홍길동      //홍길//
// byte가 아니라 글자 수로 계산한다 / 변수가 더 많이 입력되었지만 정상 동작

System.out.printf( "%f//%.8f//%.8f//%.1f//%.1f//%n", h, h, 180.55f, h, 180.54 );
//180.550000//180.55000000//180.55000305//180.6//180.5//
// 소수부 출력 기본값 / float의 낮은 정확도 문제를 볼 수 있다 / 반올림하면서 잘림
System.out.printf( "%10f//%-10f//%2f//%-2f//%02.3f//%n", h, h, h, h, h );
//180.550000//180.550000//180.550000//180.550000//180.550//
// 소수부 설정이 없거나 더 크면 전체 자릿수는 의미를 잃는다
System.out.printf( "%8.1f//%08.1f//%-8.1f//%08.3f//%2.1f//%-2.1f//%n", h, h, h, h, h, h );
//   180.6//000180.6//180.6   //0180.550//180.6//180.6//
// 부동소수 자릿수 맞추기 (공백, 0) / 정수부 보존
System.out.printf( "%,f//%,.2f//%,012.2f//%0,12.2f//%,-12.2f//%-,12.2f//%n", d, d, d, d, d, d );
// 18,177.881000//18,177.88//00018,177.88//00018,177.88//18,177.88   //18,177.88   //
// 0, 하이픈은 콤마 앞, 뒤 위치 무관
🤍공감을 눌러주세요❤️
↓↓ 로그인 없이도 가능해요