2010-02-05 9 views
1

J'essaie d'écrire un petit programme Java qui acceptera un fichier (en utilisant la classe Scanner), retourner le fichier en tant que chaîne, puis rechercher cette chaîne pour toute instance d'une sous-chaîne avec "Email:" et se terminant par ".edu". Il y aura de nombreuses instances de cette sous-chaîne, dont je veux analyser chacune dans un tableau ou un nouveau fichier.Java analysant plusieurs instances de la sous-chaîne de la chaîne

Je sais comment trouver une sous-chaîne, mais je ne sais pas comment A) rechercher toutes les instances de la sous-chaîne et B) spécifier le début et la fin de la sous-chaîne.

Quelqu'un peut-il m'aider avec cette logique?

Merci!

Répondre

1

Cela ressemble à un cas pour les expressions régulières pour moi:

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:[email protected] Bar Email:[email protected] Baz"; 

     printEmails(testString); 
    } 

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

Notez que vous obtiendrez des résultats étranges si vous avez une non.edu e-mails là-bas ... par exemple, si vous avez "Email: [email protected] Email: [email protected]" vous obtiendrez une correspondance de "[email protected] Email: a @ b .edu ".

+0

Ceci est très utile pour moi, merci! Je vais devoir en apprendre davantage sur les expressions régulières - elles semblent pouvoir faire des choses puissantes! – littleK

+0

@ behrk2: Les expressions régulières sont géniales à leur place - ce qui correspond à un motif. Ils peuvent facilement être surutilisés si. Dans ce cas, ils conviennent, mais n'essayez pas de les utiliser pour * toutes * les tâches de manipulation de chaînes ... il y a souvent des façons plus simples. –

+2

Reculez, je connais des exceptions régulières! –

2

Vous pouvez utiliser indexOf(). Je pense que vous pouvez dire où chercher aussi. Donc, pour trouver vos instances de « Email: »:

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

va résoudre le problème et itt fonctionnera pour tout modèle de courrier électronique tels que abc.co.in xyz.com ou domaines test.fileserver.abc.co.bz.