如何在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)); } } } }