본문 바로가기
Language/Java

[Java] 형식화 출력 printf() & 입력값 받기 Scanner

by 계범 2022. 2. 25.

형식화된 출력 - printf()

값을 다른 형식으로 출력하고 싶을 때 쓰인다.

 

printf()는 '지시자(specifier)'를 통해 변수의 값을 여러가지 형식으로 변환하여 출력해주는 기능을 가지고 있다.

 

 지시자  설명
 %b boolean
 %d 10진수(decimal)
 %o  8진수(octal)
 %x, %X 16진수(hexa-decimal)
 %f 부동 소수점(floating-point)의 형식으로 출력. 실수형 10진수형태
 %e, %E   지수(exponent)형태표현
 %c  문자(character)
 %s  문자열(String)
 %n  개행. 줄바꿈.

 

class PrintfEx1 {
	public static void main(String[] args) {
		byte  b = 1;
		short s = 2;
		char  c = 'A';

		int  finger = 10; 
		long big = 100_000_000_000L;       
		long hex = 0xFFFF_FFFF_FFFF_FFFFL ;  // long hex = 0xFFFFFFFFFFFFFFFFL;

		int octNum = 010;       //  8진수 10, 10진수로는 8
		int hexNum = 0x10;      // 16진수 10, 10진수로는 16
		int binNum = 0b10;      //  2진수 10, 10진수로는 2

		System.out.printf("b=%d%n", b);
		System.out.printf("s=%d%n", s);
		System.out.printf("c=%c, %d %n", c, (int)c);
		System.out.printf("finger=[%5d]%n",  finger);
		System.out.printf("finger=[%-5d]%n", finger);
		System.out.printf("finger=[%05d]%n", finger);
		System.out.printf("big=%d%n", big);
		System.out.printf("hex=%#x%n", hex); // '#'은 접두사(16진수 0x, 8진수 0)
		System.out.printf("octNum=%o, %d%n", octNum, octNum);   
		System.out.printf("hexNum=%x, %d%n", hexNum, hexNum);   
		System.out.printf("binNum=%s, %d%n", Integer.toBinaryString(binNum), binNum);  
	}
}

/*  실행결과
b=1
s=2
c=A, 65 
finger=[   10]
finger=[10   ]
finger=[00010]
big=100000000000
hex=0xffffffffffffffff
octNum=10, 8
hexNum=10, 16
binNum=10, 2
*/

 

지시자앞에 숫자를 통해 출력될 값이 차지할 공간을 지정할 수 있음.

만약 출력자가 공간만큼 안될 시에 빈공간으로 출력하나 앞에 0을 붙여두면 0으로 기본값이 나오고, - 를 붙여두면 왼쪽부터 정렬된다.

 

그외 예시

더보기
class PrintfEx2 {
	public static void main(String[] args) {
		String url = "www.codechobo.com";

		float f1 = .10f;   // 0.10, 1.0e-1
		float f2 = 1e1f;   // 10.0, 1.0e1, 1.0e+1
		float f3 = 3.14e3f;
		double d = 1.23456789;

		System.out.printf("f1=%f, %e, %g%n", f1, f1, f1); 
		System.out.printf("f2=%f, %e, %g%n", f2, f2, f2); 
		System.out.printf("f3=%f, %e, %g%n", f3, f3, f3);

		System.out.printf("d=%f%n", d);
		System.out.printf("d=%14.10f%n", d); // 전체 14자리 중 소수점 10자리

		System.out.printf("[12345678901234567890]%n");
		System.out.printf("[%s]%n", url);
		System.out.printf("[%20s]%n", url);
		System.out.printf("[%-20s]%n", url); // 오른쪽 정렬
		System.out.printf("[%.8s]%n", url);  // 왼쪽에서 8글자만 출력
	}
}

/* 결과값
f1=0.100000, 1.000000e-01, 0.100000
f2=10.000000, 1.000000e+01, 10.0000
f3=3140.000000, 3.140000e+03, 3140.00
d=1.234568
d=  1.2345678900
[12345678901234567890]
[www.codechobo.com]
[   www.codechobo.com]
[www.codechobo.com   ]
[www.code]
*/

 

입력값 받기 -Scanner

// 객체 생성
Scanner scanner = new Scanner(System.in);

String input = scanner.nextLine(); // 한줄 입력값을 받아옴. enter(개행)치기전까지의 값.
int num = scanner.nextInt(); // 정수 하나를 받아옴.

 

보다 자세한 내부 로직 및 설명은 추후 강의.

 

 

참조

'Java의 정석' 책

댓글