1. A karakterláncok összehasonlítása

A karakterláncokkal végzett egyik leggyakoribb művelet az összehasonlítás. A String osztály több mint tíz különböző metódussal rendelkezik, amelyek az egyik karakterlánc és a másik karakterlánc összehasonlítására szolgálnak. Az alábbiakban a legfontosabbak közül hétet veszünk szemügyre.

Mód Leírás
boolean equals(String str)
A karakterláncok akkor tekinthetők egyenlőnek, ha minden karakterük egyezik.
boolean equalsIgnoreCase(String str)
Összehasonlítja a karakterláncokat, figyelmen kívül hagyva a betűk kis- és nagybetűit (figyelmen kívül hagyja, hogy nagy- vagy kisbetűk-e)
int compareTo(String str)
Összehasonlítja a húrokat lexikográfiailag. 0-t ad vissza, ha a karakterláncok egyenlőek. A visszatérési érték kisebb, mint nulla, ha az aktuális karakterlánc kisebb, mint a karakterlánc paraméter. A visszatérési érték nagyobb, mintha az aktuális karakterlánc nagyobb, mint a karakterlánc paraméter.
int compareToIgnoreCase(String str)
Lexikográfiailag hasonlítja össze a karakterláncokat, figyelmen kívül hagyva a kis- és nagybetűket. 0-t ad vissza, ha a karakterláncok egyenlőek. A visszatérési érték negatív, ha az aktuális karakterlánc kisebb, mint a karakterlánc paraméter. A visszatérési érték nagyobb, mintha az aktuális karakterlánc nagyobb, mint a karakterlánc paraméter.
boolean regionMatches(int toffset, String str, int offset, int len)
Összehasonlítja a húrok részeit
boolean startsWith(String prefix)
Ellenőrzi, hogy az aktuális karakterlánc a karakterlánccal kezdődik-eprefix
boolean endsWith(String suffix)
Ellenőrzi, hogy az aktuális karakterlánc véget ér-e a karakterlánccalsuffix

Tegyük fel, hogy olyan programot akarunk írni, amely elkéri a felhasználótól egy fájl elérési útját, majd ellenőrzi a fájl típusát a kiterjesztése alapján. Egy ilyen program kódja így nézhet ki:

Kód Megjegyzések
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");
}
ScannerObjektum létrehozása
Sor olvasása a konzolból

Ellenőrizze, hogy a karakterlánc patha megadott karakterláncra végződik-e


2. Alkarakterláncok keresése

A karakterláncok összehasonlítása után a második legnépszerűbb művelet az egyik karakterlánc megtalálása a másikban. A String osztálynak van néhány módszere is:

Mód Leírás
int indexOf(String str)
Megkeresi a karakterláncot straz aktuális karakterláncban. Az első előfordulás első karakterének indexét adja vissza.
int indexOf(String str, int index)
Megkeresi a karakterláncot straz aktuális karakterláncban, kihagyva az első indexkaraktereket. Az előfordulás indexét adja vissza.
int lastIndexOf(String str)
Megkeresi a karakterláncot straz aktuális karakterláncban, a végétől kezdve. Az első előfordulás indexét adja vissza.
int lastIndexOf(String str, int index)
Megkeresi a karakterláncot straz aktuális karakterláncban a végétől, az első indexkarakterek kihagyásával.
boolean matches(String regex)
Ellenőrzi, hogy az aktuális karakterlánc egyezik-e egy reguláris kifejezés által megadott mintával.

A indexOf(String)és indexOf(String, index)módszereket gyakran kombinálva alkalmazzák. Az első módszer segítségével megtalálhatja az átadott részkarakterlánc első előfordulását az aktuális karakterláncban. A második módszer pedig lehetővé teszi a második, harmadik stb. előfordulások megtalálását az első indexkarakterek kihagyásával.

Tegyük fel, hogy van egy URL-ünk, például " https://domain.com/about/reviews ", és a domain nevet a " codegym.cc " -re szeretnénk cserélni . Az URL-eknek sokféle domain neve lehet, de ismerjük a következőket:

  • A domain név előtt két perjel szerepel – " //"
  • A domain nevet egyetlen perjel követi – " /"

Így nézne ki egy ilyen program kódja:

Kód Megjegyzések
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);
Szkenner objektum létrehozása
Sor olvasása a konzolról

A karakterlánc első előfordulásának indexének lekérése " //"
Megkapjuk a karakterlánc első előfordulásának indexét /, de csak a karakterek előfordulása után nézzük meg //.
Megkapjuk a karakterláncot az elejétől a végéig //
A karakterláncot megkapjuk /a végéig.

Összefűzzük a karakterláncokat és az új tartományt.

A lastIndexOf(String)és lastIndexOf(String, index)metódusok ugyanúgy működnek, csak a keresés a karakterlánc végétől az elejéig történik.



3. Alkarakterláncok létrehozása

A karakterláncok összehasonlítása és a részkarakterláncok keresése mellett van egy másik nagyon népszerű művelet: a karakterláncból egy részkarakterlánc beszerzése. substring()Ahogy ez megtörténik, az előző példa egy metódushívást mutatott be , amely egy karakterlánc egy részét adta vissza.

Itt van egy lista 8 metódussal, amelyek az aktuális karakterláncból adják vissza a részkarakterláncokat:

Mód Leírás
String substring(int beginIndex, int endIndex)
Az indextartomány által megadott részkarakterláncot adja vissza beginIndex..endIndex.
String repeat(int count)
Az aktuális karakterláncot n-szer megismétli
String replace(char oldChar, char newChar)
Új karakterláncot ad vissza: lecseréli a karaktert oldChara karakterrenewChar
String replaceFirst(String regex, String replacement)
Lecseréli a reguláris kifejezéssel megadott első részkarakterláncot az aktuális karakterláncban.
String replaceAll(String regex, String replacement)
Lecseréli az összes olyan részkarakterláncot az aktuális karakterláncban, amely megfelel a reguláris kifejezésnek.
String toLowerCase()
A karakterláncot kisbetűssé alakítja
String toUpperCase()
A karakterláncot nagybetűssé alakítja
String trim()
Eltávolítja az összes szóközt a karakterlánc elején és végén

Íme az elérhető módszerek összefoglalása:

substring(int beginIndex, int endIndex)módszer

A substringmetódus egy új karakterláncot ad vissza, amely az aktuális karakterlánc karaktereiből áll, az indexes karaktertől kezdve beginIndexés a -ra végződően endIndex. Mint minden Java intervallum esetében, az indexet tartalmazó karakter endIndexnem szerepel az intervallumban. Példák:

Kód Eredmény
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Ha a endIndexparaméter nincs megadva (ami lehetséges), akkor a részkarakterlánc a beginIndex karakterétől a karakterlánc végéig kerül.

repeat(int n)módszer

Az ismétlési módszer egyszerűen megismétli az aktuális karakterlánc- nidőket. Példa:

Kód Eredmény
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)módszer

A replace()metódus egy új karakterláncot ad vissza, amelyben az összes karaktert oldChara karakter helyettesíti newChar. Ez nem változtatja meg a karakterlánc hosszát. Példa:

Kód Eredmény
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()és replaceAll()módszerek

A replaceAll()metódus az egyik részkarakterlánc minden előfordulását lecseréli egy másikra. A replaceFirst()metódus lecseréli az átadott részkarakterlánc első előfordulását a megadott részkarakterláncra. A lecserélendő karakterláncot reguláris kifejezés határozza meg. A Java Multithreading küldetés reguláris kifejezéseivel foglalkozunk .

Példák:

Kód Eredmény
"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()mód

Ezeket a metódusokat akkor ismertük meg, amikor először megismertük az Stringosztály metódusainak meghívását.

trim()módszer

A trim()módszer eltávolítja a bevezető és a záró szóközt a karakterláncból. Nem érinti meg a karakterláncon belüli szóközöket (azaz nem az elején vagy a végén). Példák:

Kód Eredmény
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"