2011-09-19 10 views
0

j'ai un fichier texte comme:comment choisir un fichier texte à partir

« GET /opacial/index.php?op=results & catalogue = 1 & view = 1 & language = el = & numhits 10 & requête = \ xce \ x95 \ xce \ xbb \ xce \ xbb \ xce \ xac \ xce \ xb4 \ xce \ xb1% 20 -% 20 \ xce \ x95 \ xce \ xb8 \ xce \ xbd \ xce \ xb9 \ xce \ xba \ xce \ xad \ xcf \ x82% 20 \ xcf \ x83 \ xcf \ x87 \ xce \ xad \ xcf \ x83 \ xce \ xb5 \ xce \ xb9 \ xcf \ x82% 20
-% 20 \ xce \ x99 \ xcf \ x83 \ xcf \ x84 \ xce \ xbf \ xcf \ x81 \ xce \ xaf \ xce \ xb1
& search_field = 1 1 & page = 1

Et je veux couper tous les caractères après le mot « requête » et avant « & recherche ». (Bolds ci-dessus). J'essaie de couper les données, en utilisant des modèles, mais quelque chose ne va pas .. Pouvez-vous me donner un exemple pour l'exemple de code ci-dessus?

EDIT: Un autre problème, sauf celui est au-dessus que le matcher est utilisé uniquement pour charSequences, et j'ai un fichier qui ne peut pas casté en CharSequence ...: \

+0

Montrez-nous votre effort. Quel modèle as-tu essayé? –

+1

"J'essaie de couper les données" - montrez-nous ce que vous avez essayé et nous vous dirons où vous allez mal. – adarshr

+0

[Qu'avez-vous essayé?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

Répondre

0
".*query\\=(.*)\\&search_field.*" 

Cette regex devrait fonctionner pour vous donner une capture de ce que vous voulez supprimer. Puis String.replace devrait faire l'affaire.

Édition - réponse au commentaire. Le code suivant ...

String s = "GET /opacial/index.php?op=results&catalog=1&view=1&language=el&numhits=10&query=\\xce\\x95\\xce\\xbb\\xce\\xbb\\xce\\xac\\xce\\xb4\\xce\\xb1%20--%20\\xce\\x95\\xce\\xb8\\xce\\xbd\\xce\\xb9\\xce\\xba\\xce\\xad\\xcf\\x82%20\\xcf\\x83\\xcf\\x87\\xce\\xad\\xcf\\x83\\xce\\xb5\\xce\\xb9\\xcf\\x82%20 --%20\\xce\\x99\\xcf\\x83\\xcf\\x84\\xce\\xbf\\xcf\\x81\\xce\\xaf\\xce\\xb1&search_field=11&page=1"; 
    Pattern p = Pattern.compile(".*query\\=(.*)\\&search_field.*"); 
    Matcher m = p.matcher(s); 
    if (m.matches()){ 
     String betweenQueryAndSearch = m.group(1); 
     System.out.println(betweenQueryAndSearch); 
    } 

Produit la sortie suivante ....

\xce\x95\xce\xbb\xce\xbb\xce\xac\xce\xb4\xce\xb1%20--%20\xce\x95\xce\xb8\xce\xbd\xce\xb9\xce\xba\xce\xad\xcf\x82%20\xcf\x83\xcf\x87\xce\xad\xcf\x83\xce\xb5\xce\xb9\xcf\x82%20 --%20\xce\x99\xcf\x83\xcf\x84\xce\xbf\xcf\x81\xce\xaf\xce\xb1 
+0

l'expression rationnelle semble bonne mais je ne suis pas sûr de la façon dont je vais l'utiliser avec mon fichier .. j'ai un fichier comme mon premier poste, et je dois garder seulement ceux entre "requête" et "& search" ... comment cela se passera-t-il avec l'expression régulière? – user758084

+0

@ user758084 a répondu avec edit pour poster –

+0

cela fonctionne exactement comme vous l'avez dit, mais quand je change String s = .... avec String s = File.toString(); Je ne prends aucune sortie ... Cela signifie qu'il n'y a rien à faire correspondre .. Mais le fichier est exactement le même avec le paradigme ci-dessus plus quelques autres données ...: \ – user758084

3

quelque chose comme ça:

String yourNewText=yourOldText.split("query")[1].split("&search")[0]; 

?

pour voir comment lire un fichier dans un String, vous pouvez regarder here (il y a différentes possiblités)

+0

Edit: J'ai oublié le [0] désolé – Neifen

+0

Je ne suis pas sûr, si cela va faire le travail, parce que mon "yourOldText" est un fichier ... Comment cela peut-il arriver avec un fichier? – user758084

+0

@ user758084 lire le fichier dans une chaîne via quelque chose comme Apache Commons FileUtils.readFileToString. Notez que la solution regex que j'ai proposée nécessiterait également de lire le fichier dans une chaîne. –

Questions connexes