web-dev-qa-db-fra.com

comment obtenir des données entre guillemets en Java?

J'ai ces lignes de texte le nombre de guillemets peut changer comme:

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 puis-je obtenir les données entre les guillemets, le résultat devrait être?

comillas
mas, comillas, astuce
a, mots, sont, comillas

17
atomsfat

Vous pouvez utiliser une expression régulière pour rechercher 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 littéraux de chaîne, qu'elle contient des chaînes couvrant plusieurs "lignes" ou prend en charge d'autres délimiteurs pour les chaînes, comme un guillemet simple.

43
erickson

Consultez StringUtils dans la bibliothèque Apache commons-lang - il 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"));
13
SingleShot

Si vous voulez obtenir toutes les occurrences 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));
          }

        }

    }

}
0
Dani
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();
0
jsight

Tout d'abord, veuillez noter que vous devriez utiliser égal à () plutôt que ==. "==" par défaut demande s'il s'agit de la même instance en mémoire, ce qui peut parfois arriver dans Strings. Avec myString.equals ("..."), vous comparez les valeurs des chaînes.

Quant à savoir comment obtenir les valeurs entre les guillemets, je ne suis pas sûr de ce que vous voulez dire. "..." est un objet réel. Sinon, vous pouvez faire:

String webUrl = "www.eg.com";

0
Stephane Grenier

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

Je suppose que ce sont des chaînes de caractères dans votre grammaire.

0
Uri