czwartek, 27 września 2018

Java metoda indexOf

Java metoda indexOf

Metoda IndexOf  jest używana do zlokalizowania znaku lub ciągu znaków w innym ciągu. Na przykład, można jej używać, aby zobaczyć, czy znak @ jest w adresie e-mail. Użyjmy tego w jakimś przykładowym kodzie.
Przykładowy kod:

package uazztablice;
 
    public class LokalizowanieZnaku {
        
        public static void main(String[] args){
            
            char ampersand = '@';
            String adres_email = "uazz@uazz.pl";
            
            int wynik;
            wynik = adres_email.indexOf( ampersand );
            
            System.out.println(wynik);
        }
    }

Chcemy sprawdzić, czy znak @ znajduje się w adresie e-mail, więc najpierw deklarujemy zmienną typu char i przypisujemy jej wartość "@". (Zauważ, apostrofy wokół zmiennej char). Po skonfigurowaniu adresu e-mail, mamy zmienną wynikową. To jest zmienna typu int. Dlaczego, jest to liczba całkowita, ponieważ metoda indexOf  zwraca wartość. Metoda zwróci numer pozycji znaku @ w zmiennej adres_email. Oto linia kodu z metodą:

wynik = adres_email.indexOf( ampersand );

Ciąg, który starasz się szukać znajduje się w zmiennej. Po kropce wpisz indexOf. Między nawiasy okrągłe w metodzie indexOf masz kilka możliwości umieszczenia danych. Jedną z opcji jest wpisanie jednego znaku (lub nazwę zmiennej char). Mamy umieszczoną naszą zmienną ampersand między nawiasami okrągłymi metody indexOf. Java will then tell us the position of the @ character in the email address. It will store the value in the result variable. Java poda nam pozycję znaku @ w adresie e-mail. Będzie ona przechowywana w zmiennej wynik.

Po uruchomieniu kodu, wynikiem będzie 4. Można by pomyśleć, że znak @ jest piąty w adresie e-mail. Ale indexOf rozpocznia odliczanie od 0.

Jednakże, jeśli znaku nie ma w słowie, którego szukasz, indexOf zwróci wartość -1. Aby to przetestować, usuń znak @ z zmiennej email_address. Następnie uruchom swój kod ponownie. Zobaczysz jako wynik -1.

Możesz użyć wartości zwracanej -1 na swoją korzyść. Oto kod jeszcze raz, tylko z instrukcją IF, która analizuje wartość zmiennej wynik:

package uazztablice;
 
public class LokalizowanieZnaku {
    
    public static void main(String[] args){
        
        char ampersand = '@';
        String adres_email = "uazz@uazz.pl";
        
        int wynik;
        wynik = adres_email.indexOf( ampersand );
        
        if (wynik == -1){
            System.out.println("Zły adres e-mail");
        } else {
            System.out.println("Adres e-mail jest prawidłowy");
        }
    }
}

Więc jeśli wynik metody indexOf jest -1 to możemy zrobić jedną rzecz, a mianowicie umożliwić użytkownikowi, aby kontynuować.

Możesz także użyć indexOf aby przetestować więcej niż jeden znak. Poniższy kod sprawdza adres e-mail, aby sprawdzić, czy kończy się wyrażeniem "com.":

package uazztablice;
 
public class LokalizowanieZnaku {
    
    public static void main(String[] args){
        
        String dotCom = ".com";
        String adres_email = "uazz@uazz.pl";
        
        int wynik;
        wynik = adres_email.indexOf(dotCom);
        
        if(wynik == -1){
            System.out.println("Błędny adres e-mail");
        } else {
            System.out.println("Prawidłowy adres e-mail");
        }
    }
}

Kod jest niemal identyczny, z wyjątkiem, że mamy teraz zmienną typu String do przechowywania tekstu, który chcemy sprawdzić (. com), a nie zmienną typu char.

Ponownie wynik -1 zostanie zwrócony, jeśli tekst do wyszukania nie znajduje się w ciąg znaków, który znajduje się przed kropką metody indexOf. W przeciwnym razie, metoda indexOf zwraca położenie pierwszego znalezionego znaku. W powyższym kodzie, kropka jest na dziewiątym miejscu w adresie e-mail, kiedy zaczynasz liczenie od 0.

Możesz także określić pozycję początkową dla wyszukiwania. W naszym przykładzie adresu e-mail, możemy rozpocząć wyszukiwanie  wyrażenia ".com" po symbolu @. Oto kod, który najpierw lokalizuje pozycję symbolu @, a następnie używa ją jako pozycji wyjściowej do poszukiwania ".com"

package uazztablice;
 
public class LokalizowanieZnaku {
    
    public static void main(String[] args){
        
        char ampersand = '@';
        String dotCom = ".com";
        String adres_email = "uazz@uazz.com";
        
        int atPozycja = adres_email.indexOf(ampersand);
        int wynik = adres_email.indexOf(dotCom,atPozycja);
        
        if (wynik == -1){
            System.out.println("Błędny adres e-mail");
        } else {
            System.out.println("Prawidłowy adres e-mail " + wynik);
        }
    }
}

Nowa linia kodu jest taka:

wynik = adres_email.indexOf( dotCom, atPozycja );

Jedyną różnicą jest dodanie dodatkowej zmiennej w nawiasach metody indexOf. Nadal mamy ciąg, który chcemy wyszukać (poszukiwany tekst jest zawarty w zmiennej dotCom), ale teraz mamy pozycję, od której rozpoczniemy wyszukiwanie Jest to wartość zmiennej o nazwie atPos. Otrzymujemy wartość atPozycja przy użyciu metody indexOf, która lokalizuje położenie symbolu @ w adresie e-mail. Java będzie następnie rozpocząć wyszukiwanie od tej pozycji, a nie zaczynać od 0, które jest domyślne.

Ends With … Starts With

Dla programu powyżej, można również użyć wbudowanej metody endsWith:

Boolean koniec = adres_email.endsWith( dotcom );

Trzeba ustawić zmienną logiczną dla EndsWith, ponieważ metoda zwraca wartość jako prawda lub fałsz. Ciąg, który chcesz przetestować znajduje się między nawiasami okrągłymi metody endsWith. Jeśli tekst jest w ciągu wyszukiwania, zwracana jest wartość true, w przeciwnym razie będzie to false. Można dodać instrukcje, if ... else, aby sprawdzić wartość:

if (koniec == false ) {
System.out.println( "Błędny adres e-mail" );
}
else {
System.out.println( "Prawidłowy adres e-mail " );
}

Metoda startsWith jest stosowana w podobny sposób:

Boolean startVal = adres_email.startsWith( dotcom );

Ponownie, zwracana jest wartość logiczna prawda lub fałsz.

W następnej lekcji dowiesz się, jak korzystać z metody nazywanej substring.


Brak komentarzy:

Prześlij komentarz