Tips&Tricks I trucchi del mestiere




Confronto tra hostname

Una classe semplice che confronta due hostname verificandone l'appartenenza al medesimo host. Per la realizzazione di questa classe viene utilizzata la libreria java.net.

import java.net.*;

public class CompareName {
    public static void main (String args[]) {
	if (args.length == 2) {
	    try {
		InetAddress name1 = InetAddress.getByName(args[0]);
		InetAddress name2 = InetAddress.getByName(args[1]);

		if (name1.equals(name2))
		    System.out.println(name1 + " Φ uguale a " + name2);
		else
		    System.out.println(name1 + " Φ diverso da " + name2);
	    }
	    catch (UnknownHostException ue) {
		System.out.println("Non riesco a risolvere il nome.");
	    }
	}
    }
}


Analizziamo un URL

Come ben sappiamo, un URL altro non Φ che l'indirizzo di una pagina su Internet. La classe che segue, riceve in input un URL e restituisce le sue componenti.

import java.net.*;

public class UrlParts {
    public static void main (String args[]) {
	if (args.length == 1) {
	    try {
		// Costruisce l'URL a partire da una stringa.
		URL myurl = new URL(args[0]);

		System.out.println("L'URL e`: " + myurl);

		// Dividiamo l'URL nei suoi vari pezzi.
		System.out.println("Le parti che lo formano sono:");
		System.out.println("\tProtocollo: " + myurl.getProtocol());
		System.out.println("\tHost: " + myurl.getHost());
		System.out.println("\tPorta: " + myurl.getPort());
		System.out.println("\tFile: " + myurl.getFile());
		System.out.println("\tRef: " + myurl.getRef());
	    }
	    catch (MalformedURLException me) {
		System.out.println("Non capisco l'URL: " + args[0]);
	    }
	}
    }
}


Troviamo il server

La classe che segue prova tutte le porte locali di un host e verifica su quali di queste Φ attivo un server.

import java.net.*;

public class LookForUDPPort {
    public static void main (String args[]) {

	DatagramSocket theserver;

	// Proviamo tutte le porte
	for (int theport = 1024; theport < 65536; theport++) {
	    try {
		// Proviamo a costruire la socket
		theserver = new DatagramSocket(theport);

		// Ricordiamoci di chiudere la Socket
		theserver.close();
		}
		catch (SocketException se) {
		    // Se fallisce vuol dire che c'e` un server locale sulla
		    // porta assegnata
		    System.out.println("C'e` un server sulla porta " + theport);
		}
	}
    }
}

Occorrenza di una sottostringa in una stringa

Pu≥ essere utile trovare la prima occorrenza di una sottostringa all'interno di una stringa. La classe che segue scandisce i caratteri della stringa s alla ricerca di una sottostringa uguale a t e restituisce la posizione della prima occorrenza,se la trova, altrimenti restituisce -1.

public static int indiceDi(String s, String t) { 

        int posizione;      // se Φ stata trovata t in s 
        boolean finito;     // la scansione di t 
        int i;       // per la scansione della stringa s
        int j;       // per la scansione della stringa t
        posizione = -1; 
        i = 0; 
        while (posizione==-1 && i<=s.length()-t.length()) { 
            /* scandisce i caratteri di t 
               * per verificare che la sottostringa di s 
               * iniziante in posizione i e lunga t.length() 
               * Φ uguale a t */ 
            j = 0; 
            finito = false; 
            while (!finito && j<t.length()) 
                if (s.charAt(i+j) != t.charAt(j)) 
                    finito = true; 
                else
                    j++; 
            if (!finito) 
                posizione = i; 
            else 
                i++; 
        } 
          return posizione; 
    }

Occorrenze di un carattere in una stringa

La classe seguente calcola quante volte un certo carattere "c" Φ contenuto all'interno di una data stringa "t".

    public static int frequenza(String s, char c) { 
        int f;       // frequenza di c in s 
        int i;       // per la scansione dei caratteri  della stringa
        f = 0; 
        /* scandisce i caratteri della stringa */ 
        for (i=0; i<s.length(); i++) 
            if (s.charAt(i) == c) 
                f++; 
        return f; 
   }