Как получить данные между кавычками в 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"

Как получить данные между кавычками?

Результат должен быть:

Комильяс
mas, comillas, трюк
слова, есть, comillas

Ответы

Ответ 1

Вы можете использовать регулярное выражение для извлечения этой информации.

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

В этом примере предполагается, что язык анализируемой строки не поддерживает escape-последовательности для двойных кавычек в строковых литералах, содержит строки, которые охватывают несколько "строк" ​​или поддерживают другие разделители для строк, таких как одиночная кавычка.

Ответ 2

Проверьте StringUtils в библиотеке Apocal commons-lang - он имеет метод 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"));

Ответ 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();

Ответ 4

Во-первых, обратите внимание, что пользователь должен равняться(), а не ==. "==" по умолчанию спрашивает, являются ли они одним и тем же экземпляром в памяти, что иногда бывает в Strings. С помощью myString.equals( "..." ) вы сравниваете значения строк.

Что касается того, как вы получаете значения между кавычками, я не уверен, что вы имеете в виду. "..." - это фактический объект. Вы также можете:

Строка webUrl = "www.eg.com";

Ответ 5

Если вы анализируете весь исходный файл, а не только одну строку, парсер, основанный на грамматике функции, может быть более безопасным выбором, чем попытка сделать это на основе строк.

Я предполагаю, что это будут строковые литералы в вашей грамматике.

Ответ 6

Если вы хотите получить все сообщения из файла:

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

        }

    }

}