how to get data between quotes in java?
Asked Answered
M

6

33

I have this lines of text the number of quotes could change like:

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"

How I obtain the data between the quotes?

The result should be:

comillas
mas, comillas, trick
a, words, are, comillas

Marco answered 24/9, 2009 at 17:43 Comment(0)
C
66

You can use a regular expression to fish out this sort of information.

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

This example assumes that the language of the line being parsed doesn't support escape sequences for double-quotes within string literals, contain strings that span multiple "lines", or support other delimiters for strings like a single-quote.

Chipman answered 24/9, 2009 at 17:51 Comment(3)
Sorry, I was missing a double quote there, myself!Chipman
Can you explain what does ([^\"]*) do?Paulettapaulette
@Paulettapaulette The enclosing parentheses ( ) make this a capturing group: the content matched can be referenced later. The square brackets [ ] define a character class: any character inside will be matched---but the ^ negates the class: any character except those listed will be matched. The \" is a double-quote, escaped because double-quote is the Java string literal delimiter. The * means match zero or more of the preceding pattern, possessively. So, all together, ([^\"]*) means, "Match zero or more of any characters except double quote, and remember them as a group."Chipman
D
23

Check out StringUtils in the Apache commons-lang library - it has a substringsBetween method.

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"));
Dislimn answered 24/9, 2009 at 17:53 Comment(0)
L
3
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();
Laurice answered 24/9, 2009 at 17:50 Comment(1)
I allready try your solution this and using StrTokenizer from Apache commons and works but the trouble here is that it could be more than just 2 pair of quotes, maybe just one pair, or maybe moreMarco
H
2

Firstly, please note that you should user equals() rather than ==. "==" by default asks if they are the same instance in memory, which in Strings can sometimes be the case. With myString.equals("...") you're comparing the values of the Strings.

As for how do you obtain the values between the quotes I'm not sure what you mean. "..." is an actual object. Alternatively you could do:

String webUrl = "www.eg.com";

Hetti answered 24/9, 2009 at 17:51 Comment(2)
I'm not sure the line of text he's parsing is Java source code. It could be another script that he's trying to read from a Java program to extract some information.Chipman
I'm guessing the text is JavaScript source.Pia
A
2

If you are parsing an entire source file rather than just one line, a parser based on the grammar of the function might be a safer choice than trying to do this based on strings.

I am guessing that these would be string literals in your grammar.

Anissa answered 24/9, 2009 at 17:52 Comment(0)
S
2

If you want to get all ocurrences from a file:

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

        }

    }

}
Snatch answered 11/6, 2017 at 20:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.