如何在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,把戏
a,单词,是,comillas

您可以使用正则expression式来挖掘这类信息。

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

此示例假定被分析行的语言不支持string文本中双引号的转义序列,包含跨越多个“行”的string,或支持string的其他分隔符(如单引号)。

查看Apache commons-lang库中的StringUtils – 它有一个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(); 

首先,请注意,您应该使用equals()而不是==。 默认情况下,“==”会询问它们是否是内存中的同一个实例,在Strings中有时会是这种情况。 用myString.equals(“…”)来比较string的值。

至于你如何获得报价之间的价值,我不确定你的意思。 “…”是一个实际的对象。 或者你可以这样做:

String webUrl =“www.eg.com”;

如果要parsing整个源文件而不仅仅是一行,那么基于函数语法的parsing器可能比尝试基于string的parsing器更安全。

我猜测,这些将是你的文法中的string文字。

如果你想从文件中获得所有的出现

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