Java parsing molti casi di stringa dalla stringa
-
18-09-2019 - |
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!
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.