Analyser le Texte à l'aide du scanner useDelimiter
À la recherche pour analyser le fichier texte suivant:
Exemple de fichier texte:
<2008-10-07>text entered by user<Ted Parlor><2008-11-26>additional text entered by user<Ted Parlor>
Je voudrais analyser le texte ci-dessus afin que je puisse avoir trois variables:
v1 = 2008-10-07
v2 = text entered by user
v3 = Ted Parlor
v1 = 2008-11-26
v2 = additional text entered by user
v3 = Ted Parlor
J'ai tenté d'utiliser le scanner et useDelimiter, cependant, je vais avoir des problème sur la façon de le configurer pour avoir les résultats comme indiqué ci-dessus. Voici ma première tentative:
import java.io.*;
import java.util.Scanner;
public class ScanNotes {
public static void main(String[] args) throws IOException {
Scanner s = null;
try {
//String regex = "(?<=\\<)([^\\>>*)(?=\\>)";
s = new Scanner(new BufferedReader(new FileReader("cur_notes.txt")));
s.useDelimiter("[<]+");
while (s.hasNext()) {
String v1 = s.next();
String v2= s.next();
System.out.println("v1= " + v1 + " v2=" + v2);
}
} finally {
if (s != null) {
s.close();
}
}
}
}
Le résultat est comme suit:
v1= 2008-10-07>text entered by user v2=Ted Parlor>
Ce que je désire est:
v1= 2008-10-07 v2=text entered by user v3=Ted Parlor
v1= 2008-11-26 v2=additional text entered by user v3=Ted Parlor
Toute aide qui me permettrait d'extraire tous les trois chaînes séparément serait grandement apprécié.
OriginalL'auteur Brian | 2010-05-29
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
\s*[<>]\s*
comme délimiteur. Qui est, tout de<
ou>
, avec toute la précédant et suivant les espaces.Pour que cela fonctionne, il ne doit pas être tout
<
ou>
dans l'entrée autres que ceux utilisés pour marquer la date et les champs d'utilisateur dans l'entrée (c'est à dire pas deI <3 U!!
dans le message).Ce séparateur permet chaîne vide des pièces dans une entrée, mais il laisse aussi la chaîne vide jetons entre deux entrées, elles doivent être éliminées manuellement.
Cette affiche:
Voir aussi
J'ai utilisé de la façon suivante sur le contenu: le contenu = contenu.replaceAll("\\s+<", "<" ).trim(); Cela a résolu mon problème. Toutes les autres suggestions sont les bienvenues.
Comment pourrais-je gérer la situation où il n'y a pas de texte entre les deux balises "<2008-10-07><Ted Salon>" *** Cela rompt l'ordre des champs. Le résultat souhaité pour cette exception serait: [2008-10-07||Ted Salon|] La deuxième valeur est simplement laissé vide, et de l'ordre maintenu que vous avez fournies dans le code ci-dessus. Pas sûr que cela est possible. À bientôt, et merci pour vos commentaires.
voir la dernière révision.
Fantastique, merci beaucoup.
OriginalL'auteur polygenelubricants