Məzmuna keç
Educora
Başlanğıc15 dəq3 / 18

Sətirlər və StringBuilder

Mətnlərlə işləməyi öyrən: String metodları, sətirlərin müqayisəsi, formatlama və dəyişə bilən StringBuilder.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • String metodları ilə mətndən hissə götürmək, mətndə axtarmaq və onu çevirmək
  • Sətirləri equals ilə düzgün müqayisə etmək
  • String.format və StringBuilder ilə mətn qurmaq

İstifadəçi adı, SMS, məhsulun təsviri, axtarış sorğusu — proqramların işlədiyi məlumatın böyük hissəsi mətndir. Java-da mətn String sinfinin obyektləri ilə təmsil olunur. Bu dərsdə sətirləri kəsməyi, onlarda axtarış aparmağı, onları müqayisə etməyi və səmərəli şəkildə qurmağı öyrənəcəksən.

String metodları

Sətir simvollar ardıcıllığıdır və hər simvolun indeksi var. İndekslər 0-dan başlayır: "Baku" sətrində B 0 indeksli, u isə 3 indeksli simvoldur. String sinfinin onlarla hazır metodu var; onlar nöqtə ilə çağırılır: text.length().

Java
public class Main {
    public static void main(String[] args) {
        String city = "Baku";
        String country = "Azerbaijan";
        String text = city + ", " + country;
        System.out.println(text);
        System.out.println(text.length());
        System.out.println(text.charAt(0));
        System.out.println(text.toUpperCase());
        System.out.println(text.indexOf("Azer"));
        System.out.println(text.substring(6));
        System.out.println(text.substring(0, 4));
        System.out.println(text.contains("ku"));
        System.out.println(text.replace("Baku", "Ganja"));
        System.out.println("  hello  ".trim() + "!");
    }
}
Gözlənilən nəticə
Baku, Azerbaijan
16
B
BAKU, AZERBAIJAN
6
Azerbaijan
Baku
true
Ganja, Azerbaijan
hello!
MetodNə edirNümunədə
length()simvolların sayını qaytarır16
charAt(i)i indeksindəki simvolcharAt(0) → B
indexOf(s)s-in ilk dəfə harada başladığı (tapılmasa, −1)indexOf("Azer") → 6
substring(a, b)a-dan b-yə qədər hissə (b daxil deyil)substring(0, 4) → Baku
toUpperCase(), toLowerCase()böyük və ya kiçik hərflərə çevirirBAKU, AZERBAIJAN
contains(s)s sətrin içində varmıcontains("ku") → true
replace(a, b)bütün a-ları b ilə əvəz edirGanja, Azerbaijan
trim()əvvəldəki və sondakı boşluqları silirhello

Sətirlər dəyişməzdir

String obyekti yaradıldıqdan sonra onu dəyişmək olmur — o, dəyişməzdir (immutable). toUpperCase() kimi metodlar köhnə sətri dəyişmir, yeni sətir qaytarır. Nəticəni saxlamaq istəyirsənsə, onu dəyişənə mənimsət.

Java
public class Main {
    public static void main(String[] args) {
        String name = "aysel";
        name.toUpperCase();
        System.out.println(name);
        name = name.toUpperCase();
        System.out.println(name);
    }
}
Gözlənilən nəticə
aysel
AYSEL

Sətirləri müqayisə etmək

== operatoru sətirlərin mətnini deyil, onların yaddaşda eyni obyekt olub-olmadığını yoxlayır. Məzmunu müqayisə etmək üçün equals(), böyük və kiçik hərfləri fərqləndirməmək üçün isə equalsIgnoreCase() metodundan istifadə et.

Java
public class Main {
    public static void main(String[] args) {
        String a = "java";
        String b = new String("java");
        String c = "JAVA";
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println(a.equals(c));
        System.out.println(a.equalsIgnoreCase(c));
    }
}
Gözlənilən nəticə
false
true
false
true

Formatlama və birləşdirmə

Çox hissədən ibarət mətni + ilə yığanda onu oxumaq çətinləşir. String.format() metodu şablon qəbul edir: %s yerinə sətir, %d yerinə tam ədəd, %.1f yerinə onluq ayırıcıdan sonra bir rəqəmli kəsr ədəd qoyulur, %% isə faiz işarəsini çıxarır. System.out.printf() eyni şablonu birbaşa ekrana yazır, %n isə yeni sətir deməkdir.

Java
public class Main {
    public static void main(String[] args) {
        String name = "Elvin";
        int score = 47;
        double percent = 94.0;
        String report = String.format("%s scored %d points (%.1f%%)", name, score, percent);
        System.out.println(report);
        System.out.printf("Price: %.2f AZN%n", 12.5);
        System.out.println("a" + 1 + 2);
        System.out.println(1 + 2 + "a");
    }
}
Gözlənilən nəticə
Elvin scored 47 points (94.0%)
Price: 12.50 AZN
a12
3a
Onluq ayırıcı kompüterin regional parametrlərindən asılıdır: Azərbaycan, rus və ya türk dili parametrlərində 94,0 və 12,50 görəcəksən.

Son iki sətrə diqqət et: + soldan sağa hesablanır. "a" + 1 artıq sətirdir, ona görə 2 də ona mətn kimi qoşulur. 1 + 2 + "a" ifadəsində isə əvvəlcə ədədlər toplanır, sonra nəticə mətnə birləşdirilir.

StringBuilder: dəyişə bilən sətir

Sətirlər dəyişməz olduğuna görə hər + əməliyyatı yeni obyekt yaradır. Mətn yüzlərlə kiçik hissədən yığılanda (məsələn, dövrün içində) bu, yaddaşı və vaxtı boş yerə sərf edir. **StringBuilder** isə dəyişə bilən sətirdir: append() sona əlavə edir, insert() istənilən yerə daxil edir, reverse() tərsinə çevirir, toString() isə hazır String qaytarır.

Java
public class Main {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        sb.append(", ");
        sb.append("Elvin").append('!');
        System.out.println(sb);
        sb.insert(0, ">> ");
        System.out.println(sb);
        System.out.println(sb.length());
        sb.reverse();
        System.out.println(sb);
        String word = "level";
        String reversed = new StringBuilder(word).reverse().toString();
        System.out.println(word.equals(reversed));
    }
}
Gözlənilən nəticə
Hello, Elvin!
>> Hello, Elvin!
16
!nivlE ,olleH >>
true

Son sətirlər palindromu — tərsinə oxunanda da eyni qalan sözü yoxlayır: level sözünü çevirib əvvəlki sözlə müqayisə edirik. Metodları append(...).append(...) kimi zəncirlə də çağırmaq olar, çünki hər append elə həmin StringBuilder-i qaytarır.

Əsas fikirlər

  • Sətrin indeksləri 0-dan başlayır; son simvolun indeksi length() - 1-dir.
  • String dəyişməzdir: toUpperCase(), replace() kimi metodlar yeni sətir qaytarır.
  • Sətirlərin məzmununu == ilə deyil, equals() ilə müqayisə et.
  • String.format() və printf() şablonla mətn qurur: %s, %d, %.2f, %n.
  • StringBuilder dəyişə bilən sətirdir: append, insert, reverse, toString.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
"Java".charAt(1) nə qaytarır?