1. Əl ilə konkatenasiya problemi
Bir-iki dəyişəni çıxarmaq lazımdırsa, + operatoru həqiqətən rahatdır. Amma məlumat çox olanda konkatenasiya tez bir zamanda xaosa çevrilir, xüsusilə də rəqəmlərin formatlaşdırılması (məsələn, vergüldən sonra 2 rəqəm) və ya sətir keçidləri tələb olunanda.
String name = "Oleg";
int age = 25;
double balance = 12345.67;
System.out.println("Ad: " + name + ", yaş: " + age + ", balans: " + balance + " avro.");
“Formatlaşdırmanı” konkatenasiya içində artırmağa cəhd etmək oxunaqlılığı yalnız pisləşdirir:
System.out.println("Ad: " + name + ", yaş: " + age + ", balans: " + String.format("%.2f", balance) + " avro.");
Nəticə: sadə konkatenasiya xırda işlər üçün uyğundur, ancaq mürəkkəb mesajlar üçün daha güclü alət — String.format() lazımdır.
2. String.format — sətirləri peşəkarcasına formatlaşdırmaq
String.format() metodu şablon əsasında sətir yaratmağa və dəyərləri göstərilən mövqelərə yerləşdirməyə imkan verir.
Ümumi forma:
String result = String.format("Şablon", znacheniya);
- %s — sətir
- %d — tam ədəd
- %f — ondalıq ədəd
- %n — sətirsonu (çoxplatformalı)
String name = "Oleg";
int age = 25;
double balance = 12345.6789;
String info = String.format("Ad: %s, yaş: %d, balans: %.2f avro.", name, age, balance);
System.out.println(info);
// Çıxış: Ad: Oleg, yaş: 25, balans: 12345.68 avro.
String result = String.format("Ad: %s, yaş: %d, balans: %.2f avro", name, age, balance);
// %s — sətir, %d — tam ədəd, %.2f — vergüldən sonra 2 rəqəm olan ədəd
Rəqəmlərin və sətirlərin formatlaşdırılması
Sabit dəqiqliklə kəsr ədədlər:
double price = 99.999;
System.out.println(String.format("Qiymət: %.2f avro.", price)); // Qiymət: 100.00 avro.
Sahə eni və hizalama:
int n = 7;
System.out.println(String.format("Ədəd: [%5d]", n)); // Ədəd: [ 7]
System.out.println(String.format("Ədəd: [%-5d]", n)); // Ədəd: [7 ]
[5d] — sahənin eni 5, susmaya görə sağa hizalama;
[-5d] — sahənin eni 5, sola hizalama.
Hizalama ilə sətirlər:
String text = "Java";
System.out.println(String.format("[%10s]", text)); // [ Java]
System.out.println(String.format("[%-10s]", text)); // [Java ]
Faizlər:
double percent = 0.125;
System.out.println(String.format("Hazırdır: %.1f%%", percent * 100)); // Hazırdır: 12.5%
Faiz işarəsini çıxarmaq üçün %% istifadə edin.
Tarixlərin formatlaşdırılması (qısa)
import java.util.Date;
Date now = new Date();
System.out.println(String.format("Bu gün: %tD", now)); // Bu gün: 06/18/24
System.out.println(String.format("Vaxt: %tT", now)); // Vaxt: 15:42:07
Lokalizasiya və ayırıcılar
Susturma üzrə sistemin lokalesi istifadə olunur. Öz lokalenizi təyin etmək üçün (məsələn, onluq ayırıcısı kimi vergül) lokaleni ötürün — məsələn, Locale.FRANCE.
import java.util.Locale;
double price = 1234.56;
System.out.println(String.format(Locale.FRANCE, "%.2f", price)); // 1234,56
Praktiki nümunələr
Nümunə 1: Qısa hesabat
String name = "Anna";
int tasks = 5;
double hours = 12.3456;
String report = String.format(
"İşçi: %s%nYerinə yetirilən tapşırıqlar: %d%nSərf olunan saat: %.1f",
name, tasks, hours
);
System.out.println(report);
/* Çıxış:
İşçi: Anna
Yerinə yetirilən tapşırıqlar: 5
Sərf olunan saat: 12.3
*/
Nümunə 2: Hizalanan cədvəl
String header = String.format("%-10s | %5s | %8s", "Ad", "Ballar", "Vaxt");
String row1 = String.format("%-10s | %5d | %8.2f", "Oleg", 95, 10.5);
String row2 = String.format("%-10s | %5d | %8.2f", "Anna", 100, 9.75);
System.out.println(header);
System.out.println(row1);
System.out.println(row2);
/* Çıxış:
Ad | Ballar | Vaxt
Oleg | 95 | 10.50
Anna | 100 | 9.75
*/
Nümunə 3: Qarışıq mətn
int apples = 12;
int pears = 8;
System.out.println(String.format("Məndə %d alma və %d armud var.", apples, pears));
3. Təcrübə: tətbiqimizdə sətirlərin formatlaşdırılması
Konsol tətbiqinə formatlaşdırma əlavə edək: balans həmişə vergüldən sonra iki rəqəmlə çıxsın, sətir keçidləri — %n ilə.
Scanner console = new Scanner(System.in);
System.out.print("Adı daxil edin: ");
String name = console.nextLine();
System.out.print("Yaşı daxil edin: ");
int age = console.nextInt();
System.out.print("Balansı daxil edin: ");
double balance = console.nextDouble();
// Formatlaşdırılmış çıxış
String info = String.format("Ad: %s, yaş: %d, balans: %.2f avro.", name, age, balance);
System.out.println(info);
Yoxlayın:
- Müxtəlif dəyərlər daxil edin və balansın həmişə vergüldən sonra iki rəqəmlə çıxdığını yoxlayın (%.2f).
- Şablonu dəyişdirin ki, sətir keçidlərini %n ilə əlavə edəsiniz.
4. Sətirləri formatlaşdırarkən tipik səhvlər
Səhv № 1: Tiplər və markerlərin uyğunsuzluğu.
%d için sətir, %s üçün isə rəqəm ötürmək olmaz.
String.format("Yaş: %d", "iyirmi"); // Səhv: rəqəm gözlənilirdi, sətir ötürüldü
Səhv № 2: Arqumentlərin sırasını qarışdırmaq.
Şablon %s %d olduqda, əvvəlcə rəqəm, sonra sətir ötürsəniz — xəta və ya yalnış çıxış alacaqsınız.
Səhv № 3: Lokalenin nəzərə alınmaması.
Onluq ayırıcısı kimi vergül gözləyirsiniz, amma nöqtə görürsünüzsə — lazım olan lokaleni birinci parametr kimi String.format(...) vasitəsilə açıq şəkildə verin.
Səhv № 4: Qaçış verilməmiş faiz işarəsi.
% simvolunu çıxarmaq üçün %% istifadə edin, əks halda formatlaşdırma xətası baş verəcək.
GO TO FULL VERSION