CodeGym /Kurslar /JAVA 25 SELF /Sətirlərin formatlaşdırılması

Sətirlərin formatlaşdırılması

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION