Stringmetodları ilə mətndən hissə götürmək, mətndə axtarmaq və onu çevirmək- Sətirləri
equalsilə düzgün müqayisə etmək String.formatvəStringBuilderilə 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().
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() + "!");
}
}Baku, Azerbaijan 16 B BAKU, AZERBAIJAN 6 Azerbaijan Baku true Ganja, Azerbaijan hello!
| Metod | Nə edir | Nümunədə |
|---|---|---|
length() | simvolların sayını qaytarır | 16 |
charAt(i) | i indeksindəki simvol | charAt(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ə çevirir | BAKU, AZERBAIJAN |
contains(s) | s sətrin içində varmı | contains("ku") → true |
replace(a, b) | bütün a-ları b ilə əvəz edir | Ganja, Azerbaijan |
trim() | əvvəldəki və sondakı boşluqları silir | hello |
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.
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);
}
}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.
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));
}
}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.
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");
}
}Elvin scored 47 points (94.0%) Price: 12.50 AZN a12 3a
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.
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));
}
}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. Stringdə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.StringBuilderdəyişə bilən sətirdir:append,insert,reverse,toString.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.
"Java".charAt(1) nə qaytarır?