2010-09-07 13 views
1

J'ai cette fonction java qui extrait les chaînes de Inputstreams et retourne une liste. Il utilise java.util.Scanner et java.util.regex.Pattern.Problème appelant la fonction Java, seulement les premières trouvailles correspondent .. fermer? réinitialiser? disposer?

Le problème est que cela ne semble fonctionner que la première fois que je l'appelle. Si j'inverse mes appels, encore une fois seulement le premier fonctionne, le deuxième appel ne renvoie jamais aucun match.

Liste lsphones = extract (is, pattern, 0); Liste lsemails = extrait (est, modèle », 0);

Je pense que je dois remettre les listes ou quelque chose dans le funciton -si pas la fonction elle-même en quelque sorte, je l'ai essayé, mais continuer à obtenir des exceptions quand je fais. .

public static List<String> extract(InputStream in,String matchpattern,int grp) { 

.. scanner.close(); retour ce

Je développe ce dans le SDK Android

+4

Veuillez publier toute la méthode d'extraction, et dites-nous quelle est l'exception. Nous ne pouvons pas vous aider sans le savoir. –

Répondre

2

Est-ce que votre méthode d'extraction lu jusqu'à la fin du flux.? Je suppose que vous devez fermer et rouvrir le flux pour recommencer depuis le début. Si c'est le cas, une meilleure approche serait de faire tout votre correspondance sur un seul passage dans le flux.

+0

Il a compliqué l'expression régulière, mais je viens de consolider en un seul passage. C'est beaucoup plus rapide maintenant. Merci. – o365spo

0

Si le flux d'entrée prend en charge mark (markSupported() == true), vous pouvez éventuellement utiliser mark() ... reset() dans votre méthode. Si ce n'est pas le cas, vous devrez soit recréer le flux d'entrée, soit modifier votre méthode afin de pouvoir transmettre le résultat (par exemple, byte [] ou String) de lecture du flux d'entrée avant de l'utiliser.

+0

Veuillez utiliser 'if (in.markSupported()) ...' au lieu de 'if (in.markSupported() == true) ...'. – whiskeysierra

+0

Bon point. J'ai essayé d'écrire l'anglais plutôt que de fournir un échantillon de code, alors que j'aurais dû fournir l'exemple de code à l'avance. Je ne peux pas penser à une bonne raison pour une déclaration if réelle de vérifier explicitement est égal à vrai (ou faux d'ailleurs). –