Java :: Aufgabe #153
2 Lösungen
Überprüfen von Email Adressen
Anfänger - Java
von ZRX88
- 08.01.2017 um 12:38 Uhr
Hintergrund:
Angenommen du hast eine Internetadresse und sammelst dort Emails über ein Newsletter anmelden Formular ein.
Dadurch generierst eine Zahl x an Email Adressen aller Art.
Das Ziel ist nun zu bestimmen, Eigenschaften deiner Adressen auszuwerten. Typische Fragen sind hier beispielsweise Verteilung der Geschlechter, Alter?
Daher soll ein Programm geschrieben werden, welches eine Liste mit Email-Adressen entgegen nimmt und dann folgende Eigenschaften ausgibt:
* Valide Email? ( Ist es überhaupt eine Email...)
* Domain
* Land der Domain
* Email enthält Zahlen?
* Geburtsjahr?
* ... ( Gibt sicher noch einige spannende Eigenschaften.. Up to you!)
Optional:
* Geschlecht?
Anmerkung: Der Prozess muss nicht perfekt sein.
Angenommen du hast eine Internetadresse und sammelst dort Emails über ein Newsletter anmelden Formular ein.
Dadurch generierst eine Zahl x an Email Adressen aller Art.
Das Ziel ist nun zu bestimmen, Eigenschaften deiner Adressen auszuwerten. Typische Fragen sind hier beispielsweise Verteilung der Geschlechter, Alter?
Daher soll ein Programm geschrieben werden, welches eine Liste mit Email-Adressen entgegen nimmt und dann folgende Eigenschaften ausgibt:
* Valide Email? ( Ist es überhaupt eine Email...)
* Domain
* Land der Domain
* Email enthält Zahlen?
* Geburtsjahr?
* ... ( Gibt sicher noch einige spannende Eigenschaften.. Up to you!)
Optional:
* Geschlecht?
Anmerkung: Der Prozess muss nicht perfekt sein.
Lösungen:
Java-Code
import java.util.Arrays; import Prog1Tools.IOTools; import java.io.*; import java.nio.charset.*; public class MailCheck { //___________________________________________________________________________________________________________Main public static void main(String[] args){ //Helparrays: String[] provarray = {"googlemail", "web", "yahoo", "gmx", "freenet"}; String[] domarray = {"com", "de", "co", "it", "ch", "fr"}; String original = IOTools.readString("Email eingeben: "); System.out.println(""); if(original.contains("@")){ //CHECK auf @ if valid ---------> weitere Kriterien möglich String[] prearray = original.split("@"); // Trennung der zwei Adressteile String[] proarray = prearray[0].split("[0-9]"); String befnum = proarray[0]; //Extrahieren des Stringteliles vor einer möglichen Nummer int num = 0; if(retint(prearray[0]) != null){ //Falls keine Zahl vorhanden num = retint(prearray[0]); } String[] followingarray = prearray[1].split("\\."); // Annahme "Nur ein "." in zweitem Adressteil -> Vor Domainendung" String prov = followingarray[0]; String dom = followingarray[1]; //_________________________________________________________________________________________________________________________ // Herausfinden des Geschlechts aus eventuellem Namensteil ------> Sehr ungenau, bitte um Tips, falls Euch noch bessere Kriterien einfallen. // Möglich wäre gewesen eine große Namenssammlung anzulegen oder herunterzuladen, Geschlechter zuzuweisen und diese mit der eingegebenen Adresse zu vergleichen. // Wollte das aber hier umgehen... boolean helpbool = false; // Mit Tabelle vergleichen__________________________________________________________________________Try String vn = ""; String sx = ""; String gesch = ""; String line; try ( InputStream fis = new FileInputStream("Namensliste_csv.csv"); //=============================> Liste massig vieler Vornamen mit Geschlechtszuordnungen InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8")); BufferedReader br = new BufferedReader(isr); ) { while ((line = br.readLine()) != null) { //Muss noch einen Weg finden, Groß- und Kleinschreibung zu ignorieren String[] split = line.split(";"); if(befnum.toLowerCase().contains(split[1].toLowerCase())){ //Wenn Name vorhanden, Nachnamen wegspeichern, Geschlecht wegspeichern if((vn.length() <= 2) || (helpbool = false)){ helpbool = true; vn = split[1]; //========================>Gesamtannahme: Längster passender Teil sollte Vornamen entpsrechen (Kombination aus Vor-, und Zunamen selten ein sx = split[0]; //========================>passender Vorname. -> Bei bis jetzt allen Tests fehlerfrei! } else if(split[1].length() >= vn.length()){ //Ausschließen möglicher Teilnamen ---> Annahme dass in Deutschland nicht so häufig vorkommend. Teilbrocken abgedeckt helpbool = true; vn = split[1]; sx = split[0]; } } } //________________________________________________________________________________________Alte Methode als Rücksicherung wenn failure_______Catch } catch (IOException e) { String helpwz = String.join("z",vn,""); //Hinzufügen eines Buchstabes ans Ende, um Berechnung nicht zu verfälschen, falls der Name auf "a,e,o" etc. endet. int atemp = charcount(helpwz, 'a'); int otemp = charcount(helpwz, 'o'); int ntemp = charcount(helpwz, 'n'); int etemp = charcount(helpwz, 'e'); int ttemp = charcount(helpwz, 't'); if(helpwz.lastIndexOf('a') == (helpwz.length())-2 || helpwz.lastIndexOf('e') == (helpwz.length())-2 || helpwz.lastIndexOf('h') == (helpwz.length())-2) { gesch = "Weiblich"; } else if(helpwz.lastIndexOf('o') == (helpwz.length())-2 || helpwz.lastIndexOf('s') == (helpwz.length())-2 || helpwz.lastIndexOf('l') == (helpwz.length())-2 || helpwz.lastIndexOf('m') == (helpwz.length())-2 || helpwz.lastIndexOf('n') == (helpwz.length())-2 ) { gesch = "Männlich"; } else{ if(atemp > otemp && otemp < atemp && ttemp < atemp ){ gesch = "Weiblich"; } else if(otemp > atemp || ttemp > atemp){ gesch = "Männlich"; } else{ if(ntemp > etemp){ gesch = "Männlich"; } else if (etemp > ntemp){ gesch = "Weiblich"; } else{ gesch = "na"; } } } vn = befnum; //e.printStackTrace(); } //_________________________________________________________________________________________________________________Catchend if(sx.equals("F") || sx.equals("M")){ // Falls erfolgreich und passendes Geschlecht hinterlegt if(sx.equals("F")){ // Wenn kein passendes Geschlecht hinterlegt ist, mit alter Methode lösen gesch = "Weiblich"; } else if(sx.equals("M")){ gesch = "Männlich"; } } // Alte Methode in "else" else{ String helpwz = String.join("z",befnum,""); //Hinzufügen eines Buchstabes ans Ende, um Berechnung nicht zu verfälschen, falls der Name auf "a,e,o" etc. endet. int atemp = charcount(helpwz, 'a'); int otemp = charcount(helpwz, 'o'); int ntemp = charcount(helpwz, 'n'); int etemp = charcount(helpwz, 'e'); int ttemp = charcount(helpwz, 't'); if(helpwz.lastIndexOf('a') == (helpwz.length())-2 || helpwz.lastIndexOf('e') == (helpwz.length())-2 || helpwz.lastIndexOf('h') == (helpwz.length())-2) { gesch = "Weiblich"; } else if(helpwz.lastIndexOf('o') == (helpwz.length())-2 || helpwz.lastIndexOf('s') == (helpwz.length())-2 || helpwz.lastIndexOf('l') == (helpwz.length())-2 || helpwz.lastIndexOf('m') == (helpwz.length())-2 || helpwz.lastIndexOf('n') == (helpwz.length())-2 ) { gesch = "Männlich"; } else{ if(atemp > otemp && otemp < atemp && ttemp < atemp ){ gesch = "Weiblich"; } else if(otemp > atemp || ttemp > atemp){ gesch = "Männlich"; } else{ if(ntemp > etemp){ gesch = "Männlich"; } else if (etemp > ntemp){ gesch = "Weiblich"; } else{ gesch = "na"; } } } } //_________________________________________________________________________________________________________________________ if(helpbool){ System.out.println("Warscheinlich heißen sie: " + vn); } else{ System.out.println("Warscheinlich heißen sie: " + vn); } System.out.println(""); if(gesch.equals("na")){ System.out.println("Leider kann ich dein Geschlecht nicht ermitteln..."); } else if(helpbool){ System.out.println("Höchstwarscheinlich bist du: " + gesch); } else{ System.out.println("Warscheinlich bist du: " + gesch); } System.out.println(""); //_________________________________________________________________________________________________________________________ Geburtsjahr ermitteln if(num != 0){ String help = "" + num; if(help.length() <= 2){ if(num < 20){ System.out.println("Ich denke, Sie sind im Jahr " + (2000+ num) + " geboren!"); //Ausgabe mögliches Geburtsjahr } else if(num >= 20){ System.out.println("Ich denke, Sie sind im Jahr " + (1900+ num) + " geboren!"); } } else if(help.length() == 4){ System.out.println("Ich denke, Sie sind im Jahr " + num + " geboren!"); } if(help.length() <= 2){ if(num >= 20){ System.out.println("... und ungefähr: " + (2017 - (1900 + num)) + " Jahre alt..!"); } else if(num < 20){ System.out.println("... und ungefähr: " + (2017 - (2000 + num)) + " Jahre alt..!" ); } } else if (help.length() == 4){ System.out.println("... und ungefähr: " + (2017 - num) + " Jahre alt..!"); } else{ System.out.println("Ihr Alter kann ich leider nicht erschließen.."); } } else if(num == 0){ System.out.println("Ihr Geburtsjahr und Alter kann ich leider nicht erschließen.."); } //______________________________________________________________________________________________________________________________ Provider System.out.println(""); if(Arrays.asList(provarray).contains(prov)){ System.out.println("ihr Mailprovider ist der öffentliche Provider: " + prov); //Ausgabe möglicher Provider } else { System.out.println("ihr Mailprovider ist der mir nicht bekannte, oder private Provider: " + prov); } System.out.println(""); //______________________________________________________________________________________________________________________________ Domain if(Arrays.asList(domarray).contains(dom)){ //Zuordnung Domainendung zu Land ------------> Beliebig erweiterbar String country = ""; switch(dom){ case "com": country = "Usa"; break; case "de": country = "Deutschland"; break; case "co": country = "Großbritannien"; break; case "it": country = "Italien"; break; case "ch": country = "Schweiz"; break; case "fr": country = "Frankreich"; break; } if(country == "Schweiz"){ System.out.println("Sie kommen höchstwarscheinlich aus der: " + country ); //Domainendungen müssen aber nicht mit Herkunftsland übereinstimmen, Tips willkommen } else if (country == "Usa"){ System.out.println("Sie kommen höchstwarscheinlich aus den: " + country ); } else{ System.out.println("Sie kommen höchstwarscheinlich aus: " + country); } } else{ System.out.println("Sie kommen aus einem mir nicht bekannten Land, mit der Domainendung: " + dom); } System.out.println(""); } else{ System.out.println("Ungültige E-Mail-Adresse..! (@ Fehlt)"); } } //_______________________________________________________________________________________________________________ Methoden public static Integer retint(String s) //Methode zum Auslesen der Zahlen aus dem vorderen Adressteil { if(s== null) return null; else { char[] characters = s.toCharArray(); Integer wert = null; boolean isPrevDig = false; for(int i =0;i<characters.length;i++) { if(isPrevDig == false) { if(Character.isDigit(characters[i])) { isPrevDig = true; wert = Character.getNumericValue(characters[i]); } } else { if(Character.isDigit(characters[i])) { wert = (wert*10)+ Character.getNumericValue(characters[i]); } else { break; } } } return wert; } } public static int charcount(String bef, char cha) { //Methode zum Berechnen der Anzahl eines Chars in einem String bef = bef.toLowerCase(); cha = Character.toLowerCase(cha); int count = 0; for (int pos = -1; (pos = bef.indexOf(cha, pos+1)) != -1; count++); return count; } }
Java-Code
import java.util.Scanner; class email { public static void main (String[] args) throws java.lang.Exception { boolean at = false; boolean dot = false; boolean zahlen = false; String land = ""; int geburtsjahr = 0; String local = ""; String domain = ""; String domainland = ""; System.out.print("Eingabe der Email-Adresse: "); Scanner reader = new Scanner(System.in); String email = reader.next(); System.out.println(email); reader.close(); local = email.substring(0, email.lastIndexOf("@")); domain = email.substring(email.lastIndexOf("@") + 1, email.lastIndexOf(".")); domainland = email.substring(email.lastIndexOf("@") + 1, email.length()); //Test auf @ if(email.contains("@")) { at = true; } else { at = false; } //test auf . in domain if(domainland.contains(".")) { dot = true; } else { dot = false; } if(at && dot) { System.out.println("Die Email-Adresse ist valide.\n\n### Weitere Infos ###\n"); //Domain System.out.println("Domain: " + domain); //Land der domain land = email.substring(email.lastIndexOf(".") + 1, email.length()); switch(land) { case "de": land = "Deutschland"; break; case "com": land = "USA"; break; case "uk": land = "Vereinigtes Königreich"; break; default: land = "Dieses Land wird in dieser Version nicht unterstützt."; } System.out.println("Land der Domain: " + land); //Email enthält Zahlen for(char c : local.toCharArray()) { if(Character.isDigit(c)) { zahlen = true; } } if(zahlen) { System.out.println("Die Email-Adresse enthält Zahlen."); } else { System.out.println("Die Email-Adresse enthält keine Zahlen."); } //Geburtsjahr StringBuilder sb = new StringBuilder(); boolean found = false; for(char c : local.toCharArray()){ if(Character.isDigit(c)){ sb.append(c); found = true; } else if(found){ break; } } String sbString = sb.toString(); int jahr = Integer.parseInt(sbString); if(jahr >= 0 && jahr <= 99 || jahr >= 1900 && jahr <= 2017) { if(jahr == 0) { System.out.println("Geburtsjahr: 00" ); } else { System.out.println("Geburtsjahr: " + jahr); } } else { System.out.println("Die vorhandene Zahl ist kein Geburtsjahr."); } } else { System.out.println("Die Email-Adresse ist nicht valide."); } } }