Hej,
mam pytanie. Dla wielu pewno okaże się banalne, ale kto nie pyta nie błądzi. Niestety w dostępnych materiałach w internecie nie znalazłem odpowiedzi. Tworzę program do logowania, i chciałbym w podanym haśle wychwycić cyfry oraz duże litery. Pomoże ktoś? Czy ma Java w swojej bibliotece metody którymi mógłbym się posłużyć?
Dzięki wielkie
Ciąg znaków,
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Frankfurt am Main (Germany)
- Postów: 50
- Rejestracja: dni
- Ostatnio: dni
- Postów: 913
Klasa Character ma statyczne metody isDigit oraz isUpperCase. Można zrobić pętlę która sprawdzałaby każdy znak po kolei używając tych właśnie metod.
- Rejestracja: dni
- Ostatnio: dni
wyrażenie regularne
String Str = new String("abc");
string.matches("[a-z]");
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Frankfurt am Main (Germany)
- Postów: 50
problem polega na tym ,że muszę sprawdzić czy hasło podane ma przynajmniej dwie cyfry i conajmniej jedną dużą literę
- Rejestracja: dni
- Ostatnio: dni
- Postów: 913
Zrób licznik cyfr oraz boolean dla dużej litery (true gdy znaleziono w haśle dużą literę).
Po skończeniu pętli zwracasz true jeżeli licznik jest równy lub większy niż 2 i gdy w haśle występuje duża litera, w przeciwnym razie - wiadomo - false. Zamiast if możesz zrobić tak:
return numberOfDigits >= 2 && hasUpperCase;
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Frankfurt am Main (Germany)
- Postów: 50
import java.util.*;
public class Logowanie {
public static void main(String[] args) {
Scanner haslo = new Scanner(System.in);
System.out.println("podaj hasło");
String noweHaslo = haslo.next();
try {
werfikacjaHasla(noweHaslo);
} catch (BladPierwszy bladPierwszy) {
} catch (BladDrugi bladDrugi) {
} catch (BladTrzeci bladTrzeci) {
}
}
public static void werfikacjaHasla(String noweHaslo) throws BladPierwszy, BladDrugi, BladTrzeci {
char duzaLitera;
char cyfra;
if (noweHaslo.length() < 9) {
throw new BladPierwszy();
}
for (int i = 0; i < noweHaslo.length(); i++) {
duzaLitera = noweHaslo.charAt(i);
cyfra = noweHaslo.charAt(i);
if (Character.isUpperCase(duzaLitera)) {
if (Character.isDigit(cyfra)) {
}
else throw new BladDrugi();
}
else throw new BladTrzeci();
}
}
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Frankfurt am Main (Germany)
- Postów: 50
napisałem to w ten sposób , ale niestety coś nie działa
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5226
Dlaczego logika twojego programu jest aż tak napakowana wyjątkami?:>
- Rejestracja: dni
- Ostatnio: dni
- Postów: 913
Ta konstrukcja:
if (Character.isUpperCase(duzaLitera)) {
if (Character.isDigit(cyfra)) {
}
else throw new BladDrugi();
}
else throw new BladTrzeci();
sprawiłaby (gdyby była poprawnie napisana) że pierwsza napotkana mała litera wyrzuciła by wyjątek BladTrzeci(), a przecież za nią mogą być duże litery.
Zauważ że isDigit() znajduje się w środku isUpperCase - oznacza to że znak musiałby być jednocześnie dużą literą oraz cyfrą aby 2 if się spełnił.
Zwróć uwagę że duzaLitera oraz cyfra są takie same - w takim wypadku wystarczy jedna zmienna. Nie widzę też potrzeby deklarowania jej poza pętlą.
Brakuje u Ciebie w kodzie zmiennych o których mówiłem wcześniej, a te są wymagane bo musisz najpierw sprawdzić wszystkie znaki w haśle, dopiero potem możesz powiedzieć czego w nim brakuje.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Frankfurt am Main (Germany)
- Postów: 50
bo temat z którym zadanie jest powiązane to są wyjątki. Jest to w ramach ćwiczenia