Java-da strings haqqında ən çox verilən 10 sual burada qeyd olunur
-
Sətirləri necə müqayisə etmək olar? Nə istifadə etməli: "
==
" yoxsaequals()
?Bir sözlə, "
==
" sətirlərə istinadları müqayisə edir, lakinequals()
həmin sətirlərdə olan dəyərləri müqayisə edir. İki sətirin eyni obyekt olduğunu yoxlamaq istəmirsinizsə, istifadə etməlisinizequals()
.Simli hovuz anlayışını bilmək də yaxşı olardı .
-
Həssas məlumatları qorumaq üçün niyə
char[]
sətirlərə (String
) üstünlük verilir?Sətirlər dəyişməzdir . Bu o deməkdir ki, sətir yaradıldıqdan sonra zibil yığıcı işə salınana qədər dəyişdirilməyəcək. Massiv vəziyyətində onun elementlərini dəyişdirə biləcəyimiz tamamilə aydındır. Bu yolla, həssas məlumatlar (məsələn, parol) proqramın heç bir yerində aydın mətndə saxlanmayacaq.
-
Bir keçid ifadəsindən istifadə edərkən sətirləri parametr kimi ötürə bilərikmi ?
Bəli, JDK-nın 7-ci versiyasından başlayaraq. Əvvəllər 6-cı versiyada bu mümkün deyildi.
// java 7 only! switch (str.toLowerCase()) { case "a": value = 1; break; case "b": value = 2; break; }
-
Bir sətri tam dəyərə necə çevirmək olar?
int n = Integer.parseInt("10");
Eyni şey Java-nın digər primitiv növlərinə də aiddir.
-
Bir sətri boşluqla ayrılmış xətlərə necə bölmək olar?
Ən asan yol müntəzəm ifadələrdən istifadə etməkdir. " " " ", " ", " ", " "
\s
kimi boşluq simvollarının əvəzi kimi çıxış edir .\t
\r
\n
String[] strArray = aString.split("\\s+");
-
< Metod əslində nə edir
substring()
?JDK 6-da metod
substring()
mövcud sətirdən simvolların bir hissəsini göstərdi, lakin sətirin ayrıca nümunəsini yaratmadı. Simvollar massivi kimi təqdim olunan yeni sətir yaratmaq üçün siz bəzi boş sətir əlavə edə bilərsiniz, məsələn, bu kimi:str.substring(m, n) + ""
Nəticə yeni sətirimiz olan simvollar massividir. Bu yanaşma bəzən kodun icra müddətini azalda bilər, çünki zibil toplayıcı istifadə olunmamış böyük sətirləri məhv edə və yalnız alt sətirləri saxlaya bilər.
Oracle JDK 7-də üsul
substring()
mövcud olandan istifadə etmədən yeni simvol massivi yaradır. JDK 6 və JDK 7-də substring() metodları arasındakı fərqi əks etdirən diaqrama da nəzər sala bilərsiniz . -
String vs StringBuilder vs StringBuffer
String
vsStringBuilder
:StringBuilder
dəyişkəndir, yəni obyekt yaradıldıqdan sonra onun məzmununu dəyişə bilərik.StringBuilder
vsStringBuffer
:StringBuffer
sinxronlaşdırılmışdır, yəni eyni anda birdən çox mövzudan istifadə edildikdə düzgün işləyir, lakin -dən daha yavaşdırStringBuilder
. -
Bir xətti bir neçə dəfə necə təkrarlamaq olar?
Python-da biz sadəcə bir sətri bir ədədə vura bilərik
n
və o, n dəfə təkrarlayacaq. Java-da biz Apache Commons Lang kitabxana sinfindən bir metoddan istifadə edərepeat()
bilərikStringUtils
.String str = "abcd"; String repeated = StringUtils.repeat(str,3); //abcdabcdabcd
-
Bir sətri tarixə necə çevirmək olar?
String str = "Sep 17, 2013"; Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str); System.out.println(date); //Tue Sep 17 00:00:00 EDT 2013
-
Sətirdə müəyyən bir simvolun baş vermə sayını necə hesablamaq olar?
StringUtils
Apache Commons Lang kitabxanasından bir sinifdən istifadə edin .int n = StringUtils.countMatches("11112222", "1"); System.out.println(n);
GO TO FULL VERSION