E-Mail Validator (ohne Regex!)

NicoRyl

Mitglied
Hallo zusammen,

was ich hier versuche, ist ein E-Mail Validator der nach ein paar Kriterien die eingegebene Email überprüft.
Leider funktioniert das nicht wirklich. Es wird immer "Email ist nicht gestattet" ausgegeben.
Ich bin noch ein Anfänger, also nehmt bitte Rücksicht. Ich bin mir sicher, dass man das Ganze auch besser machen kann oder mein Code völliger Schwachsinn ist.
Trotzdem bitte ich um Hilfe.
Vielen Dank schonmal im Voraus!

LG, Nico.

Java:
package com.company;
import java.util.Scanner;

public class EmailValidator {

     public static void main (String[] args) {
         EmailValidation validation = new EmailValidation();
         validation.getInfo();
     }
}

class EmailValidation{
    private static String email;
    public static String[] topLevel;

    private static boolean test1 = true;
    private static boolean test2 = true;
    private static boolean test3 = true;
    private static boolean test4 = true;


    public static void getInfo() {
        Scanner x = new Scanner (System.in);

        System.out.println("Gebe die Email-Adresse ein: ");
        email = x.nextLine();
        System.out.println(CheckEmail(email));
    }

    public static String CheckEmail(String email1) {
        topLevel = new String[]{".com", ".de", ".net", ".at", ".schwarz", ".mail", ".eu", ".us"};

            if (email1.charAt(0) != '@') {
                test1 = true;
            }
           
            else if (email1.contains("_")) {
                test2 = false;
            }
            else if (email1.contains("@")) {
                test3 = true;
            }
           
            else if (email1.endsWith(String.valueOf(topLevel))); {
                test4 = true;
            }
           
          if (test1 && test2 && test3 && test4) {
              return "Email ist gestattet.";
          } else {
              return "Email ist nicht gestattet.";
          }
    }
}
 
Zuletzt bearbeitet von einem Moderator:

LimDul

Top Contributor
Du verwndest else if. Das heißt, wenn test1 auf true gesetzt wird, kann er in die anderen Blöcke gar nicht mehr reingehen, weil er ja schon im ersten Block ist.

Das heißt du musst für deinen Code aus dem else if jeweils ein if machen. Du willst ja jede Bedingung prüfen.
 
K

kneitzel

Gast
Deine Prüfung ist so nicht korrekt und auch nicht lesbar und ich habe Probleme, das alles sauber für Dich zu sortieren... Aber versuchen wir es mal:

a) Du initialisierst alles auf true - eine Prüfung + auf true setzen ist also unsinnig. Denn da änderst Du nichts.
b) Wenn eine Prüfung wahr ist, werden alle anderen Prüfungen nicht mehr gemacht. Das ist soweit ok, aber nur, wenn dann fest steht: es ist ungültig, d.h. Du hast eine Entscheidung.

Dann ist der Code schwer zu lesen. Ich bevorzuge da etwas in der Art (Pseudocode):
Code:
bool checkSomething(whatever) {
    if (something) return false;
    if (somethingElse) return false;
    if (anotherItem) return false;
    
    return true;
}

Dann ist also der Ansatz: Du prüfst diverse Ausschlüsse um dann ein Ergebnis zu geben, wenn es möglich ist.
 

NicoRyl

Mitglied
Deine Prüfung ist so nicht korrekt und auch nicht lesbar und ich habe Probleme, das alles sauber für Dich zu sortieren... Aber versuchen wir es mal:

a) Du initialisierst alles auf true - eine Prüfung + auf true setzen ist also unsinnig. Denn da änderst Du nichts.
b) Wenn eine Prüfung wahr ist, werden alle anderen Prüfungen nicht mehr gemacht. Das ist soweit ok, aber nur, wenn dann fest steht: es ist ungültig, d.h. Du hast eine Entscheidung.

Dann ist der Code schwer zu lesen. Ich bevorzuge da etwas in der Art (Pseudocode):
Code:
bool checkSomething(whatever) {
    if (something) return false;
    if (somethingElse) return false;
    if (anotherItem) return false;
   
    return true;
}

Dann ist also der Ansatz: Du prüfst diverse Ausschlüsse um dann ein Ergebnis zu geben, wenn es möglich ist.
Danke für die Antwort. Ich verstehe was du meinst, weiß aber leider nicht wie ich es umsetzten kann. :(
 
K

kneitzel

Gast
Ach ja: Wenn Du schon so viele Variablen hast: benenne sie richtig! Und dann keine if (whatever) boolean-Zuweisung. Das sind direkte Zuweisungen. Und keine Klassenvariablen nutzen - die Variablen werden doch nur in der Methode verwendet und können daher dann lokal sein.

Also etwas in der Art:
Java:
public static final String[] TOP_LEVEL_DOMAINS = new String[]{".com", ".de", ".net", ".at", ".schwarz", ".mail", ".eu", ".us"};

public static String CheckEmail(String email1) {
   
    boolean firstCharIsAtSign = email1.charAt(0) == '@';
    boolean containsUnderscore = email1.contains("_");
    boolean containsAtSign = email1.contains("@");
    // ...
}

Und dann ist das String.valueOf(topLevel) natürlich auch Quatsch. Mach mal einfach ein System.out.println(String.valueOf(topLevel)) um Dir das anzuzeigen....

Edit: bool -> boolean - wenn man Pseudocode kopiert kommt Quatsch raus :)
 

NicoRyl

Mitglied
Du verwndest else if. Das heißt, wenn test1 auf true gesetzt wird, kann er in die anderen Blöcke gar nicht mehr reingehen, weil er ja schon im ersten Block ist.

Das heißt du musst für deinen Code aus dem else if jeweils ein if machen. Du willst ja jede Bedingung prüfen.
Danke! Jetzt funktioniert es schonmal besser :) Allerdings funktioniert die TopLevelDomain-Prüfung noch nicht. Weißt du woran das liegen könnte?
 

NicoRyl

Mitglied
Ach ja: Wenn Du schon so viele Variablen hast: benenne sie richtig! Und dann keine if (whatever) boolean-Zuweisung. Das sind direkte Zuweisungen. Und keine Klassenvariablen nutzen - die Variablen werden doch nur in der Methode verwendet und können daher dann lokal sein.

Also etwas in der Art:
Java:
public static final String[] TOP_LEVEL_DOMAINS = new String[]{".com", ".de", ".net", ".at", ".schwarz", ".mail", ".eu", ".us"};

public static String CheckEmail(String email1) {
  
    boolean firstCharIsAtSign = email1.charAt(0) == '@';
    boolean containsUnderscore = email1.contains("_");
    boolean containsAtSign = email1.contains("@");
    // ...
}

Und dann ist das String.valueOf(topLevel) natürlich auch Quatsch. Mach mal einfach ein System.out.println(String.valueOf(topLevel)) um Dir das anzuzeigen....

Edit: bool -> boolean - wenn man Pseudocode kopiert kommt Quatsch raus :)
Vielen Dank für deine Hilfe. - Okay, das "String.valueOf" macht keinen Sinn. Wie kann ich denn andernfalls diese TopLevelDomain Prüfen?
 
K

kneitzel

Gast
In einer Schleife alle Elemente des Array prüfen.

´Sowas würde ich in einer separaten Methode schreiben, um es übersichtlich zu halten, aber Du kannst es auch innerhalb schreiben. Dazu eine lokale Variable auf false setzen. Dann alle Elemente prüfen. Wenn eine passt, dann die Variable auf true setzen.
Das wäre das 08/15 Schema für sowas
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z E-Mail senden Allgemeine Java-Themen 2
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
jumichel Eclipse The package javax.mail is not accessible Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
N E-Mail per Java verschicken Allgemeine Java-Themen 2
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
B Java Mail: Prüfung auf neue Emails Allgemeine Java-Themen 1
B Java Mail: Emails sortieren? Allgemeine Java-Themen 5
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
B Mail: Nicht vorhandener Empfänger ermitteln Allgemeine Java-Themen 4
B Java Mail: Unterscheidung bei Attachments und eingefügte Bilder in Email Allgemeine Java-Themen 18
T java mail 1.4.2| ssl Allgemeine Java-Themen 2
E javax.mail sene Type ändern Allgemeine Java-Themen 2
R Compiler-Fehler Bild per E-Mail versenden Allgemeine Java-Themen 3
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
D JPanel in Mail darstellen Allgemeine Java-Themen 30
D Mail aus GUI generieren Allgemeine Java-Themen 2
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
KeVoZ_ Java Mail senden - geht nicht Allgemeine Java-Themen 4
K Input/Output E-mail Zusammenfassen Senden Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
M Java Mail verwenden Allgemeine Java-Themen 20
X Mail versenden mit java.mail Allgemeine Java-Themen 14
L Java Mail Allgemeine Java-Themen 0
H Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException Allgemeine Java-Themen 5
B Java Mail Client als Outlook ausgeben Allgemeine Java-Themen 2
F E-Mail aus JAVA senden nach Umstellung auf Netbean 7.4 mit Java 7U45 nicht mehr möglich Allgemeine Java-Themen 4
T popup für e-mail Allgemeine Java-Themen 2
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
P javax.mail MessageCount Allgemeine Java-Themen 13
I Eigenes Mail-Programm schreiben Allgemeine Java-Themen 21
C E-Mail: Authenticator.getPasswordAuthentication() wird nicht gerufen Allgemeine Java-Themen 2
GUI-Programmer Java Mail - Proxy für Verbindung einstellen Allgemeine Java-Themen 2
P Mail wird nicht gesendet - Muss ich kein PW angeben ? Allgemeine Java-Themen 13
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
S Java Mail Allgemeine Java-Themen 3
G Problem Java Mail API: CC wird nicht berücksichtigt Allgemeine Java-Themen 7
R php hat mail() und java? Allgemeine Java-Themen 5
B Per BatchScript Mail versenden Allgemeine Java-Themen 27
S mail per smtp lokal in postfix einliefern Allgemeine Java-Themen 6
Mike90 Graph in einer Mail verschicken Allgemeine Java-Themen 7
N Java Mail Allgemeine Java-Themen 5
F Spam-Mail-Programm gesucht Allgemeine Java-Themen 11
N Java Mail Allgemeine Java-Themen 7
M [Java Mail] Multipart beim Senden funktioniert nicht. Allgemeine Java-Themen 11
S Shell-Befehl: mail Allgemeine Java-Themen 6
W mail senden mit java Allgemeine Java-Themen 4
C Desktop.mail Problem. IO Exception: Failed to open. Allgemeine Java-Themen 3
P Mail Notifier Allgemeine Java-Themen 9
J String auf E-Mail überprüfen Allgemeine Java-Themen 4
S E-Mail an nicht-RFC822-formatierte Adresse Allgemeine Java-Themen 4
M Desktop mail attachments Allgemeine Java-Themen 3
S E-Mail-Links: geklickten Link ermitteln Allgemeine Java-Themen 4
F Umlaute: E-Mail per JavaMail und Textfile Allgemeine Java-Themen 5
C Mail Api http Protokoll? Allgemeine Java-Themen 5
C E-Mail Versand Allgemeine Java-Themen 3
0x7F800000 e-mail mit einer virtuellen datei schicken? Allgemeine Java-Themen 3
J Mail schicken über mailx Allgemeine Java-Themen 3
G E-Mail versenden Allgemeine Java-Themen 6
L Infos zu java.mail Allgemeine Java-Themen 5
H Java Mail hängt sich unregelmässig auf Allgemeine Java-Themen 8
G Mail Konten (E-Mails holen) Allgemeine Java-Themen 5
P welche java version für javax.mail? Allgemeine Java-Themen 7
S JavaMail --> HTML-Mail verschicken? Allgemeine Java-Themen 7
S Ungelesene Mails mit Java Mail abholen Allgemeine Java-Themen 3
S Java Mail IOException Allgemeine Java-Themen 13
B Mail mit Java Allgemeine Java-Themen 2
S Java mail weiterleitung funktioniert nicht Allgemeine Java-Themen 2
L E-Mail Auswertung mit Servlet (Excel) Allgemeine Java-Themen 3
G Probleme beim Mail-Api mit BCC Allgemeine Java-Themen 2
S Mail mit zip-Attachment Allgemeine Java-Themen 2
G mail body parsen (->attachment & filename) Allgemeine Java-Themen 2
C [javax.mail] Betreff vergleichen Allgemeine Java-Themen 5
C [javax.mail] Folder not open Allgemeine Java-Themen 2
G Probleme mit java.mail Allgemeine Java-Themen 2
M javax.mail – Sending failed – Invalid Addresses Allgemeine Java-Themen 8
R Java Mail Abrufen von Mails Allgemeine Java-Themen 2
P Inhalt einer Mail anzeigen Allgemeine Java-Themen 5
S E-Mail ueber Exchange Server schicken! Allgemeine Java-Themen 3
P Streams per Mail mit JavaMailAPI versenden Allgemeine Java-Themen 3
S java mail API, email versenden Allgemeine Java-Themen 8
S mail von server mittels mailapi löschen Allgemeine Java-Themen 2
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
D Variablen C Expression Validator Allgemeine Java-Themen 7
H Swing Validator Allgemeine Java-Themen 4
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
T Datum OHNE Uhrzeit Zeitzonen-übergreifend Allgemeine Java-Themen 4
N mit sysout, ohne sysout Allgemeine Java-Themen 17
O Programmierprüfung auf moodle ohne Hilfsmittel... Allgemeine Java-Themen 23
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
M Switches ohne String Allgemeine Java-Themen 18
A Java JDK ohne Oracle Konto Allgemeine Java-Themen 5
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
A Java ListNode Element einfügen ohne Bibliothek Allgemeine Java-Themen 6
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben