2011-11-08 1 views
0

Je veux lire un fichier chaque ligne et modifier uniquement les lignes qui présente une URL à partir d'un serveur spécifique ... Mon code est comme ...modèle java pour une url

Scanner ReadIsbn = new Scanner (new FileReader ("C:/Users/...."));   

    Pattern pat = Pattern.compile("http:////www.librarything.com//isbn//"); 

    while (ReadIsbn.hasNextLine()){ 

     String line = ReadIsbn.nextLine(); 
     Matcher m = pat.matcher(line); 
     if (m.matches() == true) { 
      EDIT line.... 

     } 

    } 

} 

Et il est ne fonctionne pas ... En fait m.matches de() est toujours faux .. Dans le fichier je donne en entrée, il y a des lignes comme:

1) http://www.librarything.com/isbn/0-9616696-7-5.html 
2) http://www.librarything.com/isbn/0-86078-322-7.html 
Cultural tourism : how the arts can help market tourism products, how 
blablabla 

(je veux modifier que les deux premières lignes du exemple)

Répondre

2

Vous n'avez pas besoin d'échapper e barre oblique dans votre motif. Cela devrait faire

Pattern pat = Pattern.compile("http://www.librarything.com/isbn/"); 

Un autre problème est que la méthode matches tente de faire correspondre modèle contre le texte d'entrée entier. Utilisez

if (m.find()){ 
     EDIT line.... 
} 

Si vous voulez simplement vérifier le préfixe que vous faites ici, vous pouvez également utiliser la méthode String#startsWith

1

Il ne fonctionne pas parce que la méthode matches() correspond gamme complète. Vous devez soit ajouter .* à la fin de votre modèle

Pattern pat = Pattern.compile("http://www.librarything.com//isbn/.*");

ou méthode d'utilisation find() 'à la place.

De même, vous ne devez pas écrire des barres obliques en double. Ce caractère '/' est en avant, pas en arrière.