как получить данные между кавычками в 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, trick
а, слова, стоят, комиллы
6 ответов
вы можете использовать регулярное выражение, чтобы поймать такого рода информации.
Pattern p = Pattern.compile("\"([^\"]*)\"");
Matcher m = p.matcher(line);
while (m.find()) {
System.out.println(m.group(1));
}
в этом примере предполагается, что язык анализируемой строки не поддерживает escape-последовательности для двойных кавычек в строковых литералах, содержит строки, охватывающие несколько "строк", или поддерживает другие разделители для строк, таких как одинарная кавычка.
проверить StringUtils
в библиотеке Apache 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"));
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();
во-первых, обратите внимание, что вы должны равняться пользователю (), а не ==. "=="по умолчанию спрашивает, являются ли они одним и тем же экземпляром в памяти, что иногда может иметь место в строках. С моей тетивой.равняется."(..") вы сравниваете значения строк.
Что касается того, как вы получаете значения между кавычками, я не уверен, что вы имеете в виду. "..."это реальный объект. В качестве альтернативы вы можете сделать:
строка webUrl = "www.eg.com";
Если вы анализируете весь исходный файл, а не только одну строку, синтаксический анализатор, основанный на грамматике функции, может быть более безопасным выбором, чем пытаться сделать это на основе строк.
Я предполагаю, что это будут строковые литералы в вашей грамматике.
Если вы хотите получить все ocurrences из файла:
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));
}
}
}
}