2009-09-24 7 views
14

J'ai cette lignes de texte le nombre de citations pourrait changer comme:comment obtenir des données entre guillemets dans java?

Here just one "comillas" 
But I also could have more "mas" values in "comillas" and that "is" the "trick" 
I was thinking in a method that return "a" list of "words" that "are" between "comillas" 

comment j'obtenir les données entre les guillemets le résultat devrait être ?:

Comillas
mas, Comillas, tour
a, les mots, sont, Comillas

+0

Ohh vous voulez dire, c'est la ligne de texte? – OscarRyz

Répondre

34

Vous pouvez utiliser une expression régulière pour extraire ce type d'informations.

Pattern p = Pattern.compile("\"([^\"]*)\""); 
Matcher m = p.matcher(line); 
while (m.find()) { 
    System.out.println(m.group(1)); 
} 

Cet exemple suppose que la langue de la ligne en cours d'analyse ne prend pas en charge les séquences d'échappement pour les guillemets doubles dans les chaînes littérales, contiennent des chaînes qui couvrent plusieurs « lignes », ou soutenir d'autres délimiteurs pour les chaînes comme une seule -citation.

+0

Désolé, il me manquait une double citation ici, moi-même! – erickson

+0

Oui, votre code fait l'affaire – atomsfat

0
String line = "if(getip(document.referrer)==\"www.eg.com\" || getip(document.referrer)==\"192.57.42.11\""; 
StringTokenizer stk = new StringTokenizer(line, "\""); 
stk.nextToken(); 
String egStr = stk.nextToken(); 
stk.nextToken(); 
String ipStr = stk.nextToken(); 
+1

J'essaie déjà votre solution et en utilisant StrTokenizer de Apache commons et fonctionne mais le problème ici est qu'il pourrait être plus que juste 2 paires de citations, peut-être juste une paire, ou peut-être plus – atomsfat

0

Tout d'abord, s'il vous plaît noter que vous devez l'utilisateur est égal à() plutôt que ==. "==" demande par défaut s'il s'agit de la même instance en mémoire, ce qui dans les chaînes peut parfois être le cas. Avec myString.equals ("..."), vous comparez les valeurs des chaînes.

En ce qui concerne comment obtenir les valeurs entre les guillemets, je ne suis pas sûr de ce que vous voulez dire. "..." est un objet réel. Vous pouvez également faire:

String webUrl = "www.eg.com";

+2

Je ne suis pas sûr de la ligne du texte il analyse est le code source Java. Il pourrait s'agir d'un autre script qu'il essaie de lire à partir d'un programme Java pour extraire des informations. – erickson

+0

Je suppose que le texte est source JavaScript. –

0

Si vous analysez un fichier source entier plutôt qu'une seule ligne, un analyseur basé sur la grammaire de la fonction peut être un choix plus sûr que d'essayer de le faire en fonction des chaînes.

Je suppose que ce serait des littéraux de chaîne dans votre grammaire.

12

Extrayez la bibliothèque StringUtils dans la bibliothèque Apones commons-lang - elle a une méthode substringsBetween.

String lineOfText = "if(getip(document.referrer)==\"www.eg.com\" || getip(document.referrer)==\"192.57.42.11\""; 

String[] valuesInQuotes = StringUtils.substringsBetween(lineOfText , "\"", "\""); 

assertThat(valuesInQuotes[0], is("www.eg.com")); 
assertThat(valuesInQuotes[1], is("192.57.42.11")); 
0

Si vous souhaitez obtenir tous ocurrences d'un fichier:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class testReadQuotes { 


    public static void main(String args[]) throws IOException{ 

     Pattern patt = Pattern.compile("\"([^\"]*)\""); 
     BufferedReader r = new BufferedReader(new FileReader("src\\files\\myFile.txt")); 

     String line; 

     while ((line = r.readLine()) != null) { 

      Matcher m = patt.matcher(line); 

      while (m.find()) { 
      System.out.println(m.group(0)); 
      } 

     } 

    } 

} 
Questions connexes