Java’da indekslər sıfırdan başlayaraq sayılır. Nümunələr aşağıdakı dəyişən üzərindən veriləcəkdir:
String animals = "animals";
length()
The method signature:
int length()
System.out.println(animals.length()); // 7
charAt()
Axtarılan indeksdə olan simvolu (character) geri qaytarır.
The method signature:
char charAt(int index)
System.out.println(animals.charAt(0)); // a System.out.println(animals.charAt(6)); // s System.out.println(animals.charAt(7)); // throw StringIndexOutOfBoundsException
Dokumentasiyaya (javadoc) əsasən isə IndexOutOfBoundsException
fırladır.
indexOf()
Hər hansı bir simvolun (character) və ya ifadənin verilmiş stringin daxilində olub olmadığını axtarır və nəticə müsbət olarsa, axtarılan ifadənin ilk tapıldığı indeksi geri qaytarır. Axtarışa istənilən indeksdən başlamaq olar.
The method signature:
int indexOf(int ch)
int indexOf(int ch, int fromIndex)
int indexOf(String str)
int indexOf(String str, int fromIndex)
System.out.println(animals.indexOf('a')); // 0 System.out.println(animals.indexOf("al")); // 4 System.out.println(animals.indexOf('a', 4)); // 4 System.out.println(animals.indexOf("al", 5)); // -1 System.out.println(animals.indexOf("al", 9)); // -1 System.out.println(animals.indexOf('')); //doesn’t compile, empty character literal
charAt()
metodundan fərqli olaraq indexOf()
metodu axtarılan dəyəri tapmadıqda exception fırlatmır, -1 dəyərini geri qaytarır.
substring()
The method signature:
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
System.out.println(animals.substring(3)); // mals System.out.println(animals.substring(animals.indexOf('m'))); // mals System.out.println(animals.substring(3, 4)); // m System.out.println(animals.substring(3, 7)); // mals System.out.println(animals.substring(3, 3)); // empty string System.out.println(animals.substring(3, 2)); // throws StringIndexOutOfBoundsException System.out.println(animals.substring(3, 8)); // throws StringIndexOutOfBoundsException System.out.println(animals.substring(7)); // empty string
beginIndex
qayıdan nəticəyə daxildir, amma endIndex
daxil deyil. Sonuncu nümunəyə diqqət edək, 7-ci indeks mövcud olmamasına baxmayaraq exception baş vermədi. Əgər bu nümunədə (length-beginIndex)
mənfi olmazsa, exception baş vermir, sıfıra bərabər olarsa, boş string qaytarır.
toLowerCase() and toUpperCase()
The method signature:
String toLowerCase()
String toUpperCase()
System.out.println(animals.toUpperCase()); // ANIMALS System.out.println(“Abc123”.toLowerCase()); // abc123
equals() and equalsIgnoreCase()
The method signature:
boolean equals(Object str)
boolean equalsIgnoreCase(String str)
System.out.println("abc".equals("ABC")); // false System.out.println("ABC".equals("ABC")); // true System.out.println("abc".equalsIgnoreCase("ABC")); // true Object o1 = "str"; Object o2 = "Str"; System.out.println(o1.equals(o2)); // false System.out.println(o1.equalsIgnoreCase(o2)); // DOES NOT COMPILE,only String.. System.out.println(((String)o1).equalsIgnoreCase((String)o2)); // true
startsWith() and endsWith()
The method signature:
boolean startsWith(String prefix)
boolean endsWith(String suffix)
System.out.println("abc".startsWith("a")); // true System.out.println("abc".startsWith("A")); // false System.out.println("abc".endsWith("c")); // true System.out.println("abc".endsWith("a")); // false
contains()
The method signature:
boolean contains(CharSequence s)
System.out.println("abc".contains("b")); // true System.out.println("abc".contains("B")); // false
Bu metod çıxdıqdan sonra artıq indexOf()
metodu ilə şərt yoxlamağa ehtiyac qalmadı.
replace()
The method signature:
String replace(char oldChar, char newChar)
String replace(CharSequence oldChar, CharSequence newChar)
System.out.println("abcabc".replace('a', 'A')); // AbcAbc System.out.println("abcabc".replace("a", "A")); // AbcAbc System.out.println("abcabc".replace("ab", "AB")); // ABcABc System.out.println("abcabc".replace("d", "D")); // abcabc , no exception StringBuilder sb = new StringBuilder("bc"); System.out.println("abcabc".replace(sb, "BC")); // aBCaBC
2 faktı yadda saxlamaq lazımdır:
replace()
metodu yeni String obyekti yaradır;- əgər
replace()
metoduna göndərilən hər iki parametr eynidirsə, yəni heç bir dəyişiklik baş verməyəcəksə, eyni String obyekti geri qaytarılır.
"String".replace('g','g') == "String" // true "String".replace('g','g') == "String".replace('S','S') // true "String".replace('S','s') == "String".replace('S','s') // false "String".replace('g','G') == "StrinG" // false
trim()
Stringin əvvəlindəki və sonundakı boşluqları, həmçinin \t
(tab), \n
(newline) və \r
(carriage return) simvollarını da silir. Amma ortadakı boşluqlara toxunmur.
The method signature:
String trim()
System.out.println("abc".trim()); // abc System.out.println("abc\r !".trim()); // ! System.out.println("\t a b c \n".trim()); // a b c
intern()
The method signature:
public String intern()
Bu metod boyük ehtimalla imtahan suallarına daxil edilmir, hazırlaşdığım sertifikat kitabında da bu metodla bağlı hər hansı bir izah yox idi. Amma Enthuware testlərində bu metodla bağlı sualla rastlaşa bilərsiniz. Həmçinin intervülərdə soruşulma ehtimalı çox olduğuna görə qısaca baxaq.
İlkin olaraq qeyd edək ki, String Pool’da saxlanılan bütün dəyərlər “intern” özəlliyinə sahibdir. Bu nə deməkdir? Tutaq ki, bizim String
tipində bir listimiz var, özündə ad və soyadları saxlayır. Adlar və ya soyadlar bir neçə dəfə təkrarlana bilər, amma intern özəlliyi sayəsində təkrarlanan ad və ya soyadlar pool’da cəmi bircə dəfə saxlanılır. Yəni String Pool’a əlavə edilən bütün dəyərlər avtomatik olaraq intern edilir və təkrarlanan dəyərlər olarsa, bu təkrarlanma aradan qaldırılaraq yaddaş sahəsinə qənaət edilir. Bununla da eyni dəyərə malik fərqli referanslar eyni yaddaş sahəsinə müraciət edir. Əgər bizim String name1="Mushfiq";
adlı dəyərimiz varsa, String name2="Mushfiq";
dəyərini yaratdıqda "Mushfiq"
dəyəri String pool`da yenidən yaradılmayacaq, artıq mövcud olduğundan name1
və name2
hər ikisi eyni yaddaş sahəsinə müraciət edəcək. Bəs intern()
metodu hər hansı String
dəyəri və ya referansı üzərindən çağırıldıqda nə baş verir? Əgər həmin String
obyekti pool’da mövcuddursa, həmin obyekt geri döndürülür, yox əgər mövcud deyilsə, həmin obyekt pool’a əlavə edilir və onun referansı geri döndürülür.
intern()
metodu ilə çağırılmış 2 String’in müqayisəsinin true
qaytarması üçün mütləq onların dəyərləri bir-birinə bərabər olmalıdır, yəni s1.intern() == s2.intern()
o zaman true
olar ki, s1.equals(s2)
true
olsun. Nümunələr üzərindən davam edək:
String s1 = new String("java"); String s2 = "java"; String s3 = s1.intern(); System.out.println(s1 == s2); // false System.out.println(s2 == s3); // true
new
açar sözü ilə yaradılan String dəyərlər bildiyimiz kimi String Pool’da saxlanılmır, ona görə də s1
və s2
dəyişənlərinin dəyərləri eyni olsa da onlar fərqli yaddaş sahələrində saxlanılan obyektlərə müraciət edirlər. Bu səbəbdən onların referanslarını müqayisə etdikdə geriyə false
dəyər qaytarır. s3
dəyişəni ilə isə yuxarıda qeyd etdiyimiz qayda baş verir. s1
dəyişəni üzərindən intern()
metodu çağırıldığına görə ilk öncə s1
dəyərinin String Pool’da olub olmaması yoxlanılır. s1
dəyəri artıq poolda mövcuddur və bu dəyərə eyni zamanda s2
referansı da müraciət edir. Və yekun nəticə odur ki, s2
və s3
pool`da mövcud olan eyni obyektə, yəni eyni yaddaş sahəsinə müraciət edirlər. Bu səbəbdən onların referanslarını müqayisə etdikdə geriyə true
dəyər qaytarır.
[topics lang=az]