2010-09-09 8 views
0

Je suis en train de prendre un fichier qui stockent des données de ce formulaire:Comment créer un tableau pour stocker des correspondances de chaînes regex dans java?

Name=”Biscuit” 

LatinName=”Retrieverus Aurum” 

ImageFilename=”Biscuit.png” 

DNA=”ITAYATYITITIAAYI” 

et lut avec une expression régulière pour trouver les informations utiles; à savoir, les champs et leur contenu.

J'ai déjà créé la regex, mais je ne peux sembler obtenir qu'une seule correspondance à la fois, et je voudrais plutôt mettre chaque correspondance de chaque ligne du fichier dans leur propre index d'une chaîne.

Voici ce que j'ai jusqu'à présent:

Scanner scanFile = new Scanner(file); 
     while (scanFile.hasNextLine()){ 
      System.out.println(scanFile.findInLine(".*")); 
      scanFile.nextLine(); 
     } 
     MatchResult result = null; 
     scanFile.findInLine(Constants.ANIMAL_INFO_REGEX); 
     result = scanFile.match(); 


     for (int i=1; i<=result.groupCount(); i++){ 
      System.out.println(result.group(i)); 
      System.out.println(result.groupCount()); 
     } 
     scanFile.close(); 
     MySpecies species = new MySpecies(null, null, null, null); 
     return species; 

Merci beaucoup pour votre aide!

+0

Il serait sans doute utile d'inclure votre regex aussi au cas où le problème réside là. – Shadwell

+0

duplication possible de [My regex provoque un débordement de pile dans Java; qu'est-ce qui me manque?] (http://stackoverflow.com/questions/3681928/my-regex-is-causing-a-stack-overflow-in-java-what-am-i-missing) –

Répondre

0

J'espère que je comprends bien votre question ... Voici un exemple qui vient du site Web d'Oracle:

/* 
* This code writes "One dog, two dogs in the yard." 
* to the standard-output stream: 
*/ 
import java.util.regex.*; 

public class Replacement { 
    public static void main(String[] args) 
         throws Exception { 
     // Create a pattern to match cat 
     Pattern p = Pattern.compile("cat"); 
     // Create a matcher with an input string 
     Matcher m = p.matcher("one cat," + 
         " two cats in the yard"); 
     StringBuffer sb = new StringBuffer(); 
     boolean result = m.find(); 
     // Loop through and create a new String 
     // with the replacements 
     while(result) { 
      m.appendReplacement(sb, "dog"); 
      result = m.find(); 
     } 
     // Add the last segment of input to 
     // the new String 
     m.appendTail(sb); 
     System.out.println(sb.toString()); 
    } 
} 

Hope this helps ...

+0

Non, ce n'est pas le cas ne s'applique pas du tout. –