Java analizar muchos casos de subcadena de cadena
-
18-09-2019 - |
Pregunta
Estoy tratando de escribir un pequeño programa en Java que acepte un archivo (usando la clase escáner), devuelva el archivo como una cadena y, a continuación, buscar esa cadena para cualquier instancia de una subcadena que empieza por "Correo electrónico:" y terminando con ".edu". Habrá muchos ejemplos de esta subserie, cada uno de los cuales quiero analizar a cabo en una matriz o un nuevo archivo.
Yo sé cómo encontrar una subcadena, pero no sé cómo a) Búsqueda de todas las instancias de la subcadena y B) especifica el inicio y el final de la subcadena.
Puede alguien ayudarme con esta lógica?
Gracias!
Solución
Esto suena como un caso de expresiones regulares para mí:
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));
}
}
}
Tenga en cuenta que usted va a obtener resultados extraños si tiene alguna e-mails no .edu
allí ... por ejemplo, si usted tiene "e-mail: foo@bar.com Email: un @ b. edu" que acabaría con un partido de 'foo@bar.com correo electrónico:. a@b.edu'
Otros consejos
Se puede usar indexOf (). Creo que se puede decir que dónde buscar a partir también. Así que para encontrar a las instancias del "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]]*)");
va a resolver el problema y ITT trabajará para cualquier patrón de correo electrónico como abc.co.in xyz.com o dominios test.fileserver.abc.co.bz.