Jelenlegi hely

8.2.4. Karakter vagy String keresése Stringben

A String osztály két függvényt nyújt, amelyek pozícióval térnek vissza: indexOf és a lastIndexOf. A következő lista e két függvény alakjait mutatja be:

int indexOf(int), int lastIndexOf(int) Visszaadja az első (utolsó) előforduló karakter indexét.
int indexOf(int, int), int lastIndexOf(int, int) Visszaadja az első (utolsó) előfordulókarakter indexét, az indextől előre (visszafele) keresve.
int indexOf(String), int lastIndexOf(String) Visszaadja az első (utolsó) előforduló String indexét.
int indexOf(String, int), int lastIndexOf(String, int) Visszaadja a String első (utolsó) előfordulásának indexét, a megadott indextől előre (visszafele) keresve.

A StringBuffer és a StringBuilder osztályok nem támogatják az indexOf és a lastIndexOf függvényeket. Ha használni szeretnénk ezeket a metódusokat, először String-gé kell konvertálnunk az objektumot a toString függvény segítségével.

Megjegyzés: A metódusok az alábbi Filename osztályban nem minden hibát kezelnek, és feltételezik, hogy az paraméter tartalmazza a teljes könyvtár útvonalat, és a fájlnevet kiterjesztéssel.

public class Filename {
    private String fullPath;
    private char pathSeparator, extensionSeparator;
    public Filename(String str, char sep, char ext) {
        fullPath = str;
        pathSeparator = sep;
        extensionSeparator = ext;
    }
    public String extension() {
        int dot = fullPath.lastIndexOf(extensionSeparator);
        return fullPath.substring(dot + 1);
    }
    public String filename() {
        int dot = fullPath.lastIndexOf(extensionSeparator);
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(sep + 1, dot);
    }
    public String path() {
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(0, sep);
    }
}

A következő program létrehoz egy Filename objektumot, és meghívja a metódusait:

public class FilenameDemo {
    public static void main(String[] args) {
        final String FPATH = "/home/mem/index.html";
        Filename myHomePage = new Filename(FPATH,
                                           '/', '.');
        System.out.println("Extension = " +
             myHomePage.extension());
        System.out.println("Filename = " +
             myHomePage.filename());
        System.out.println("Path = " +
             myHomePage.path());
    }
}

A program kimenete:

Extension = html
Filename = index
Path = /home/mem

Ahogy a fenti példa is mutatja, az extension metódus a lastIndexOf függvényt használja, hogy megtalálja az utolsó pontot a fájlnévben. Ha a fájlnévben nincs pont, a lastIndexOf visszatérési értéke -1, és a substring metódus StringIndexOutOfBoundsException kivételt dob.

Ha a pont karakter (.) az utolsó karakter a String-ben, akkor ez egyenlő a String hosszával, ami egyel nagyobb, mint a legnagyobb index a String-ben (mivel az indexelés 0-val kezdődik).