Domanda

Sto cercando di scrivere un piccolo programma Java che accetta un file (utilizzando la classe Scanner), restituire il file come una stringa, e quindi cercare quella stringa per qualsiasi istanza di una stringa che inizia con "E-mail:" e termina con ".edu". Ci saranno molti casi di questa stringa, ognuno dei quali voglio analizzare fuori in una matrice o di un nuovo file.

So come trovare una stringa, ma non so come A) la ricerca di tutte le istanze del sottostringa e B) specificare l'inizio e la fine della stringa.

Qualcuno mi può aiutare con questa logica?

Grazie!

È stato utile?

Soluzione

Questo suona come un caso per le espressioni regolari per me:

import java.util.regex.*;

public class Test
{
    private static final Pattern EMAIL_PATTERN = Pattern.compile
        ("Email:(.*?\\.edu)");

    public static void main(String[] args)
    {
        String testString = "FooEmail:jjj@xyz.edu Bar Email:mmm@abc.edu Baz";

        printEmails(testString);
    }

    public static void printEmails(String input)
    {
        Matcher matcher = EMAIL_PATTERN.matcher(input);
        while (matcher.find())
        {
            System.out.println(matcher.group(1));
        }
    }
}

Si noti che si ottengono risultati strani se avete dei non e-mail .edu in là ... per esempio, se si dispone di "E-mail: foo@bar.com Email: una @ b. edu" si finirebbe con una partita di 'foo@bar.com E-mail:. a@b.edu'

Altri suggerimenti

Si potrebbe utilizzare indexOf (). Penso che si può dire dove ricercare troppo. Quindi, per trovare le istanze di "E-mail:":

while(index < input.size()){
  substringLocation = input.indexOf("Email:", index);
  // do something with substring
  index = substringLocation;
}
private static final Pattern EMAIL_PATTERN = Pattern.compile
    ("Email:(.*?\\.[a-z]*?[\\.[a-z]]*)"); 

risolverà il problema e ITT funziona per qualsiasi modello di posta elettronica come abc.co.in xyz.com o domini test.fileserver.abc.co.bz.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top