Gyakorlati alapok I.
A System.out.printf() és a System.out.format()
Az előző fejezet alapszinten, de kellő részletességgel ismertette a System.out.println() lehetőségeit. Segítségével főként szöveget írtunk ki a konzolra, amibe persze belefér számkiírás is.
Azonban lehetőségünk van számok (dátumot is beleértve) még precízebb, aprólékosabb megjelenítésére a System.out.printf() és a System.out.format() függvények segítségével, de lényegében azonos funkcionalitással.
Tapasztalt programozók felismerhetik az ősrégi, már a C programozási nyelvben is jelenlévő printf() metódust. Szintaktikája, használata is egészen hasonló a Java-beli printf() metódushoz, természetesen nem véletlenül, hiszen a C programozási nyelv a Java egyik közvetlen ősének tekinthető.
A precíz számformázásról a függvény paraméterlistájában...
System.out.printf(paraméterlista)
System.out.format(paraméterlista)
...átalakítók (converter) és egyéb, járulékos jelzések (flag) gondoskodnak. Ezeket a szimbólumokat a paraméterlistában a...
"%...%n"
...karakterek közé kell tennünk.
Nézzük meg a szabványos, azaz hivatalos Java-dokumentációs converter és flag listát, amelyet azonnali példákkal ellenőrzünk is!
-
n - új sor karakter a formázás végén, mindig kötelező kitenni, de \n helyett mindig %n kombinációt használjunk! (Egyéb formázó karakterek című fejezet)
-
d - számformázó konverter - decimális integer
public class Main {
public static void main(String[] args) {
int a = 4444;
System.out.printf("%d%n", a);
}
}
Végeredmény:
4444
Ha a formázási utasítást elhagyjuk ("%d%n"), a rendszer hibát jelez! Arra is vigyázzunk, hogy a paraméterek között nem plusz jel (+), hanem vessző (,) van!
-
f - számformázó konverter - lebegőpontos
public class Main {
public static void main(String[] args) {
float a = 4444;
System.out.printf("%f%n", a);
}
}
Végeredmény:
4444.000000
-
tB - dátumformázó konverter - a hónap teljes neve helyi elnevezés szerint (értsd: a JVM által használt nyelv szerint)
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tB%n", calendar);
}
}
Végeredmény:
April
-
td - dátumformázó konverter - a hónap napja maximálisan 2 számjegy hosszban - 0-val kitöltött, ha szükséges
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%td%n", calendar);
}
}
Végeredmény:
02
-
te - dátumformázó konverter - a hónap napja maximálisan 2 számjegy hosszban
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%te%n", calendar);
}
}
Végeredmény:
2
-
ty - dátumformázó konverter - évszám maximálisan 2 számjegy hosszban
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%ty%n", calendar);
}
}
Végeredmény:
20
-
tY - dátumformázó konverter - évszám maximálisan 4 számjegy hosszban
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tY%n", calendar);
}
}
Végeredmény:
2020
-
tl - dátumformázó konverter - óra 12 órás kijelzésben
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tl%n", calendar);
}
}
Végeredmény:
10
-
tM - dátumformázó konverter - perc maximálisan 2 számjegy hosszban - 0-val kitöltött, ha szükséges
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tM%n", calendar);
}
}
Végeredmény:
43
-
tp - dátumformázó konverter - napszak
-
am - délelőtt (ante meridiem)
-
pm - délután (post meridiem)
-
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tp%n", calendar);
}
}
Végeredmény:
am
-
tD - dátumformázó konverter - teljes dátum helyi megjelenítés szerint
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tD%n", calendar);
}
}
Végeredmény:
04/02/20
(2020. ápilis 2.)
Természetesen a dátumot, illetve az időt a fenti konverterek kombinációiból is összeállíthatjuk:
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tB %te, %tY%n", calendar, calendar,
calendar);
}
}
Végeredmény:
April 2, 2020
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.format("%tl:%tM %tp%n", calendar, calendar,
calendar);
}
}
Végeredmény:
11:02 am
-
07 - flag - maximálisan kiírásra kerülő karakterszélesség (itt 7) - 0-val kitöltött, ha szükséges
public class Main {
public static void main(String[] args) {
int a = 4444;
System.out.printf("%07d%n", a);
}
}
Végeredmény:
0004444
-
7 - flag - maximálisan kiírásra kerülő karakterszélesség (itt 7)
public class Main {
public static void main(String[] args) {
int a = 4444;
System.out.printf("%07d%n", a);
}
}
Végeredmény:
4444
(3 üres karakter a szám elején)
-
+ - flag - előjel kiírása
public class Main {
public static void main(String[] args) {
int a = 4444;
System.out.printf("%+d%n", a);
}
}
Végeredmény:
+4444
public class Main {
public static void main(String[] args) {
int a = -4444;
System.out.printf("%+d%n", a);
}
}
Végeredmény:
-4444
-
- - flag - balra igazítás (ez az alapértelmezés)
-
.4 - flag - tizedes pont utáni számjegyek maximális száma (itt 4)
public class Main {
public static void main(String[] args) {
double PI = Math.PI;
System.out.printf("%.4f%n", PI);
}
}
Végeredmény:
3.1416
-
10.4 - flag - 10 = maximális kiírt számjegyek száma, 4 = tizedes pont utáni számjegyek maximális száma, mindez jobbra igazítva
public class Main {
public static void main(String[] args) {
double PI = Math.PI;
System.out.printf("%10.4f%n", PI);
}
}
Végeredmény:
3.1416
(4 üres karakter a szám elején)
Amint az már említésre került, a System.out.printf() és a System.out.format() függvények azonos funkcionalitással rendelkeznek, ezért vígan felcserélhetők egymással. Példáink során mi mindvégig a System.out.printf() metódust használtuk, ám a System.out.format() függvény is ugyanazon eredményeket fogja biztosítani:
public class Main {
public static void main(String[] args) {
double PI = Math.PI;
System.out.format("%.4f%n", PI);
}
}
Végeredmény:
3.1416
Természetesen lehetőségünk van a függvényekkel karakterek és karakterfüzérek (String) kiírására is. Az alábbi futtatható Java-kódokban ilyen módon használjuk fel 2 függvényünket és velük gyakran használatos karakterek ASCII-kódjait listázzuk ki:
public class Main {
public static void main(String[] args) {
int karakter;
for(karakter = 33; karakter <= 122; karakter++) {
System.out.printf("ASCII ertek = %d,
Karakter = %c\n", karakter, karakter);
}
}
}
Végeredmény:
ASCII ertek = 33, Karakter = !
ASCII ertek = 34, Karakter = "
ASCII ertek = 35, Karakter = #
ASCII ertek = 36, Karakter = $
ASCII ertek = 37, Karakter = %
ASCII ertek = 38, Karakter = &
ASCII ertek = 39, Karakter = '
ASCII ertek = 40, Karakter = (
ASCII ertek = 41, Karakter = )
ASCII ertek = 42, Karakter = *
ASCII ertek = 43, Karakter = +
ASCII ertek = 44, Karakter = ,
ASCII ertek = 45, Karakter = -
ASCII ertek = 46, Karakter = .
ASCII ertek = 47, Karakter = /
ASCII ertek = 48, Karakter = 0
ASCII ertek = 49, Karakter = 1
ASCII ertek = 50, Karakter = 2
ASCII ertek = 51, Karakter = 3
ASCII ertek = 52, Karakter = 4
ASCII ertek = 53, Karakter = 5
ASCII ertek = 54, Karakter = 6
ASCII ertek = 55, Karakter = 7
ASCII ertek = 56, Karakter = 8
ASCII ertek = 57, Karakter = 9
ASCII ertek = 58, Karakter = :
ASCII ertek = 59, Karakter = ;
ASCII ertek = 60, Karakter = <
ASCII ertek = 61, Karakter = =
ASCII ertek = 62, Karakter = >
ASCII ertek = 63, Karakter = ?
ASCII ertek = 64, Karakter = @
ASCII ertek = 65, Karakter = A
ASCII ertek = 66, Karakter = B
ASCII ertek = 67, Karakter = C
ASCII ertek = 68, Karakter = D
ASCII ertek = 69, Karakter = E
ASCII ertek = 70, Karakter = F
ASCII ertek = 71, Karakter = G
ASCII ertek = 72, Karakter = H
ASCII ertek = 73, Karakter = I
ASCII ertek = 74, Karakter = J
ASCII ertek = 75, Karakter = K
ASCII ertek = 76, Karakter = L
ASCII ertek = 77, Karakter = M
ASCII ertek = 78, Karakter = N
ASCII ertek = 79, Karakter = O
ASCII ertek = 80, Karakter = P
ASCII ertek = 81, Karakter = Q
ASCII ertek = 82, Karakter = R
ASCII ertek = 83, Karakter = S
ASCII ertek = 84, Karakter = T
ASCII ertek = 85, Karakter = U
ASCII ertek = 86, Karakter = V
ASCII ertek = 87, Karakter = W
ASCII ertek = 88, Karakter = X
ASCII ertek = 89, Karakter = Y
ASCII ertek = 90, Karakter = Z
ASCII ertek = 91, Karakter = [
ASCII ertek = 92, Karakter = \
ASCII ertek = 93, Karakter = ]
ASCII ertek = 94, Karakter = ^
ASCII ertek = 95, Karakter = _
ASCII ertek = 96, Karakter = `
ASCII ertek = 97, Karakter = a
ASCII ertek = 98, Karakter = b
ASCII ertek = 99, Karakter = c
ASCII ertek = 100, Karakter = d
ASCII ertek = 101, Karakter = e
ASCII ertek = 102, Karakter = f
ASCII ertek = 103, Karakter = g
ASCII ertek = 104, Karakter = h
ASCII ertek = 105, Karakter = i
ASCII ertek = 106, Karakter = j
ASCII ertek = 107, Karakter = k
ASCII ertek = 108, Karakter = l
ASCII ertek = 109, Karakter = m
ASCII ertek = 110, Karakter = n
ASCII ertek = 111, Karakter = o
ASCII ertek = 112, Karakter = p
ASCII ertek = 113, Karakter = q
ASCII ertek = 114, Karakter = r
ASCII ertek = 115, Karakter = s
ASCII ertek = 116, Karakter = t
ASCII ertek = 117, Karakter = u
ASCII ertek = 118, Karakter = v
ASCII ertek = 119, Karakter = w
ASCII ertek = 120, Karakter = x
ASCII ertek = 121, Karakter = y
ASCII ertek = 122, Karakter = z
public class Main {
public static void main(String[] args) {
int karakter;
for(karakter = 33; karakter <= 122; karakter++) {
System.out.format("ASCII ertek = %d,
Karakter = %c\n", karakter, karakter);
}
}
}
Végeredmény:
ASCII ertek = 33, Karakter = !
ASCII ertek = 34, Karakter = "
ASCII ertek = 35, Karakter = #
ASCII ertek = 36, Karakter = $
ASCII ertek = 37, Karakter = %
ASCII ertek = 38, Karakter = &
ASCII ertek = 39, Karakter = '
ASCII ertek = 40, Karakter = (
ASCII ertek = 41, Karakter = )
ASCII ertek = 42, Karakter = *
ASCII ertek = 43, Karakter = +
ASCII ertek = 44, Karakter = ,
ASCII ertek = 45, Karakter = -
ASCII ertek = 46, Karakter = .
ASCII ertek = 47, Karakter = /
ASCII ertek = 48, Karakter = 0
ASCII ertek = 49, Karakter = 1
ASCII ertek = 50, Karakter = 2
ASCII ertek = 51, Karakter = 3
ASCII ertek = 52, Karakter = 4
ASCII ertek = 53, Karakter = 5
ASCII ertek = 54, Karakter = 6
ASCII ertek = 55, Karakter = 7
ASCII ertek = 56, Karakter = 8
ASCII ertek = 57, Karakter = 9
ASCII ertek = 58, Karakter = :
ASCII ertek = 59, Karakter = ;
ASCII ertek = 60, Karakter = <
ASCII ertek = 61, Karakter = =
ASCII ertek = 62, Karakter = >
ASCII ertek = 63, Karakter = ?
ASCII ertek = 64, Karakter = @
ASCII ertek = 65, Karakter = A
ASCII ertek = 66, Karakter = B
ASCII ertek = 67, Karakter = C
ASCII ertek = 68, Karakter = D
ASCII ertek = 69, Karakter = E
ASCII ertek = 70, Karakter = F
ASCII ertek = 71, Karakter = G
ASCII ertek = 72, Karakter = H
ASCII ertek = 73, Karakter = I
ASCII ertek = 74, Karakter = J
ASCII ertek = 75, Karakter = K
ASCII ertek = 76, Karakter = L
ASCII ertek = 77, Karakter = M
ASCII ertek = 78, Karakter = N
ASCII ertek = 79, Karakter = O
ASCII ertek = 80, Karakter = P
ASCII ertek = 81, Karakter = Q
ASCII ertek = 82, Karakter = R
ASCII ertek = 83, Karakter = S
ASCII ertek = 84, Karakter = T
ASCII ertek = 85, Karakter = U
ASCII ertek = 86, Karakter = V
ASCII ertek = 87, Karakter = W
ASCII ertek = 88, Karakter = X
ASCII ertek = 89, Karakter = Y
ASCII ertek = 90, Karakter = Z
ASCII ertek = 91, Karakter = [
ASCII ertek = 92, Karakter = \
ASCII ertek = 93, Karakter = ]
ASCII ertek = 94, Karakter = ^
ASCII ertek = 95, Karakter = _
ASCII ertek = 96, Karakter = `
ASCII ertek = 97, Karakter = a
ASCII ertek = 98, Karakter = b
ASCII ertek = 99, Karakter = c
ASCII ertek = 100, Karakter = d
ASCII ertek = 101, Karakter = e
ASCII ertek = 102, Karakter = f
ASCII ertek = 103, Karakter = g
ASCII ertek = 104, Karakter = h
ASCII ertek = 105, Karakter = i
ASCII ertek = 106, Karakter = j
ASCII ertek = 107, Karakter = k
ASCII ertek = 108, Karakter = l
ASCII ertek = 109, Karakter = m
ASCII ertek = 110, Karakter = n
ASCII ertek = 111, Karakter = o
ASCII ertek = 112, Karakter = p
ASCII ertek = 113, Karakter = q
ASCII ertek = 114, Karakter = r
ASCII ertek = 115, Karakter = s
ASCII ertek = 116, Karakter = t
ASCII ertek = 117, Karakter = u
ASCII ertek = 118, Karakter = v
ASCII ertek = 119, Karakter = w
ASCII ertek = 120, Karakter = x
ASCII ertek = 121, Karakter = y
ASCII ertek = 122, Karakter = z