1. Dizeleri karşılaştırma

Dizelerle yapılan en yaygın işlemlerden biri karşılaştırmadır. String sınıfı, bir dizeyi başka bir dizeyle karşılaştırmak için kullanılan ondan fazla farklı yönteme sahiptir. Aşağıda ana olanlardan yedisine bir göz atacağız.

Yöntemler Tanım
boolean equals(String str)
Dizeler, tüm karakterleri eşleşirse eşit kabul edilir.
boolean equalsIgnoreCase(String str)
Harflerin büyük/küçük harf durumunu göz ardı ederek dizeleri karşılaştırır (büyük veya küçük harf olduklarını yoksayar)
int compareTo(String str)
Dizeleri sözlüksel olarak karşılaştırır. Dizeler eşitse 0 döndürür. Geçerli dize, dize parametresinden küçükse dönüş değeri sıfırdan küçüktür. Dönen değer, geçerli dizginin dizgi parametresinden büyük olması durumundaki değerden büyüktür.
int compareToIgnoreCase(String str)
Büyük/küçük harf yok sayılarak dizeleri sözlükbilimsel olarak karşılaştırır. Dizeler eşitse 0 döndürür. Geçerli dize, dize parametresinden küçükse dönüş değeri negatiftir. Dönen değer, geçerli dizginin dizgi parametresinden büyük olması durumundaki değerden büyüktür.
boolean regionMatches(int toffset, String str, int offset, int len)
Dizelerin parçalarını karşılaştırır
boolean startsWith(String prefix)
Geçerli dizenin dizeyle başlayıp başlamadığını kontrol ederprefix
boolean endsWith(String suffix)
Geçerli dizenin dizeyle bitip bitmediğini kontrol edersuffix

Kullanıcıdan bir dosyanın yolunu soran ve ardından uzantısına göre dosya türünü kontrol eden bir program yazmak istediğinizi varsayalım. Böyle bir programın kodu şöyle görünebilir:

kod notlar
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
ScannerBir nesne oluşturun
Konsoldan bir satır okuyun

Dizenin pathverilen dizeyle bitip bitmediğini kontrol edin


2. Alt dizileri arama

Dizeleri karşılaştırdıktan sonra en popüler ikinci işlem, bir diziyi diğerinin içinde bulmaktır. String sınıfının da bunun için birkaç yöntemi vardır:

Yöntemler Tanım
int indexOf(String str)
strGeçerli dizide dizeyi arar . İlk oluşumun ilk karakterinin dizinini döndürür.
int indexOf(String str, int index)
strİlk karakterleri atlayarak geçerli dizide dizeyi arar index. Oluşum dizinini döndürür.
int lastIndexOf(String str)
strSondan başlayarak geçerli dizide dizeyi arar . İlk oluşumun dizinini döndürür.
int lastIndexOf(String str, int index)
strİlk karakterleri atlayarak, geçerli dizide sondan itibaren dizeyi arar index.
boolean matches(String regex)
Geçerli dizenin, normal ifade tarafından belirtilen bir kalıpla eşleşip eşleşmediğini kontrol eder.

indexOf(String)ve yöntemleri indexOf(String, index)genellikle birlikte kullanılır. İlk yöntem, geçerli dizede geçirilen alt dizenin ilk geçtiği yeri bulmanızı sağlar. Ve ikinci yöntem, ilk dizin karakterlerini atlayarak ikinci, üçüncü vb. oluşumları bulmanızı sağlar.

" https://domain.com/about/reviews " gibi bir url'miz olduğunu ve alan adını " codegym.cc " ile değiştirmek istediğimizi varsayalım . URL'ler her türlü farklı alan adına sahip olabilir, ancak aşağıdakileri biliyoruz:

  • Alan adından önce iki eğik çizgi vardır - " //"
  • Alan adının ardından tek bir eğik çizgi gelir - " /"

Böyle bir programın kodu şöyle görünür:

kod notlar
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Bir Tarayıcı nesnesi oluşturun
Konsoldan bir satır okuyun

Dizenin ilk geçtiği yerin dizinini alın " //"
Dizenin ilk geçtiği yerin dizinini alırız /, ​​ancak yalnızca karakterlerin geçtiği yere bakarız //.
Diziyi baştan sona karakterlerin sonuna kadar alıyoruz Diziyi sonuna kadar //
alıyoruz . Dizeleri ve yeni etki alanını birleştiriyoruz. /

ve metotları aynı şekilde çalışır, sadece stringin sonundan başına kadar arama yapılır lastIndexOf(String).lastIndexOf(String, index)



3. Alt diziler oluşturma

Dizeleri karşılaştırmaya ve alt dizeleri bulmaya ek olarak, çok popüler başka bir eylem daha vardır: bir dizeden bir alt dize almak. Tesadüf eseri, önceki örnek size substring()bir dizgenin bir kısmını döndüren bir yöntem çağrısı gösterdi.

Geçerli dizeden alt dizeler döndüren 8 yöntemin bir listesi:

Yöntemler Tanım
String substring(int beginIndex, int endIndex)
Dizin aralığı tarafından belirtilen alt dizeyi döndürür beginIndex..endIndex.
String repeat(int count)
Geçerli diziyi n kez tekrarlar
String replace(char oldChar, char newChar)
Yeni bir dize döndürür: karakteri oldCharkarakterle değiştirirnewChar
String replaceFirst(String regex, String replacement)
Geçerli dizede normal bir ifadeyle belirtilen ilk alt dizeyi değiştirir.
String replaceAll(String regex, String replacement)
Geçerli dizedeki normal ifadeyle eşleşen tüm alt dizeleri değiştirir.
String toLowerCase()
Dizeyi küçük harfe dönüştürür
String toUpperCase()
Dizeyi büyük harfe dönüştürür
String trim()
Bir dizenin başındaki ve sonundaki tüm boşlukları kaldırır

İşte mevcut yöntemlerin bir özeti:

substring(int beginIndex, int endIndex)yöntem

Yöntem, substringgeçerli dizgedeki karakterlerden oluşan, indeksli karakterden başlayan beginIndexve ile biten yeni bir dizge döndürür endIndex. Java'daki tüm aralıklarda olduğu gibi, dizini olan karakter endIndexaralığa dahil edilmez. Örnekler:

kod Sonuç
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Parametre endIndexbelirtilmezse (ki bu mümkündür), o zaman alt dize, beginIndex'teki karakterden dizenin sonuna kadar alınır.

repeat(int n)yöntem

Yineleme yöntemi, yalnızca geçerli dize nsürelerini tekrarlar. Örnek:

kod Sonuç
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)yöntem

Yöntem , tüm karakterlerin karakterle değiştirildiği replace()yeni bir dize döndürür . Bu, dizenin uzunluğunu değiştirmez. Örnek:oldCharnewChar

kod Sonuç
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()ve replaceAll()yöntemler

Yöntem replaceAll(), bir alt dizenin tüm oluşumlarını diğeriyle değiştirir. Yöntem, replaceFirst()geçirilen alt dizenin ilk oluşumunu belirtilen alt dizeyle değiştirir. Değiştirilecek dize normal bir ifadeyle belirtilir. Java Multithreading görevinde düzenli ifadeleri inceleyeceğiz .

Örnekler:

kod Sonuç
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()yöntemler

Sınıfın metotlarını çağırmayı ilk öğrendiğimizde bu metotlarla tanışmıştık String.

trim()yöntem

Yöntem trim(), bir dizeden baştaki ve sondaki boşlukları kaldırır. Bir dize içindeki boşluklara dokunmaz (yani başında veya sonunda değil). Örnekler:

kod Sonuç
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"