2009-09-24 15 views
14

tengo esta líneas de texto del número de cotizaciones podría cambiar como:cómo obtener datos entre comillas en 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" 

cómo obtener los datos entre las comillas el resultado debe ser ?:

comillas
mas, comillas, truco
a, palabras, son, comillas

+0

Ohh que quiere decir, que es la línea de texto? – OscarRyz

Respuesta

34

Puede usar una expresión regular para pescar este tipo de información.

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

En este ejemplo se asume que el lenguaje de la línea que se está analizando no admite secuencias de escape para las comillas dobles dentro de la cadena, contiene cadenas que abarcan varias "líneas", o apoyar a otros delimitadores de cadenas como una sola -citar.

+0

Lo siento, me faltaba una comilla doble allí, yo mismo! – erickson

+0

Sí, tu código hace el truco – 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

Ya intenté con su solución y utilizando StrTokenizer desde Apache commons y funciona, pero el problema aquí es que podría ser más que solo 2 pares de comillas, tal vez solo un par, o quizás más – atomsfat

0

En primer lugar, tenga en cuenta que se debe hacer el usuario es igual a() en lugar de ==. "==" por defecto pregunta si son la misma instancia en la memoria, que en Strings a veces puede ser el caso. Con myString.equals ("...") está comparando los valores de las cadenas.

En cuanto a cómo se obtienen los valores entre las comillas, no sé a qué se refiere. "..." es un objeto real. Alternativamente, puede hacer:

String webUrl = "www.eg.com";

+2

No estoy seguro de la línea de texto él está analizando el código fuente de Java. Podría ser otro script que está tratando de leer desde un programa Java para extraer algo de información. – erickson

+0

Supongo que el texto es fuente de JavaScript. –

0

Si está analizando un archivo fuente completo en lugar de solo una línea, un analizador basado en la gramática de la función puede ser una opción más segura que tratar de hacerlo a partir de cadenas.

Supongo que estos serían literales de cadenas en su gramática.

12

Consulte StringUtils en la biblioteca Apache commons-lang - tiene un método 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 desea obtener todas las ocurrencias de un archivo:

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)); 
      } 

     } 

    } 

} 
Cuestiones relacionadas