Java :: Aufgabe #153

2 Lösungen Lösungen öffentlich

Ü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.

Lösungen:

vote_ok
von Allocortex (350 Punkte) - 21.02.2017 um 08:02 Uhr
Quellcode ausblenden 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;
	    }
	
	
	
}
vote_ok
von Bufkin (1410 Punkte) - 12.09.2017 um 12:31 Uhr
Quellcode ausblenden 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.");
        }
    }
}
1809881

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.