cómo obtener los datos entre comillas en java?
Pregunta
Tengo esta líneas de texto del número de cotizaciones podría cambiar como:
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 puedo obtener los datos entre las cotizaciones?
El resultado debe ser:
comillas
Mas, comillas, truco
una, es decir, son, comillas
Solución
Puede utilizar una expresión regular para pescar a cabo 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 comilla sencilla.
Otros consejos
Salida StringUtils
en la biblioteca Apache commons-lang -. Que 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"));
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();
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, lo que a veces Cuerdas puede ser el caso. Con myString.equals ( "...") que está comparando los valores de las cuerdas.
En cuanto a ¿cómo obtener los valores entre las comillas no estoy seguro de lo que quiere decir. "..." es un objeto real. Si lo prefiere puede hacer:
Cadena WebUrl = "www.eg.com";
Si está analizando un archivo fuente de todo en lugar de sólo una línea, un analizador basado en la gramática de la función podría ser una opción más segura que tratar de hacerlo sobre la base de las cadenas.
Supongo que estos serían los literales de cadena en su gramática.
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));
}
}
}
}