OCA Java imtahan mövzuları

Important String Methods

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:

  1. replace() metodu yeni String obyekti yaradır;
  2. ə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 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 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 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]

About the author

Mushfiq Mammadov

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.