【问题标题】:how to get data between quotes in java?如何在java中的引号之间获取数据?
【发布时间】:2010-12-01 04:24:58
【问题描述】:

我有这行文字,引号的数量可能会改变:

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"

如何获取引号之间的数据?

结果应该是:

comillas
mas, comillas, 把戏
a, words, are, comillas

【问题讨论】:

  • 哦,你的意思是,那是文本行?

标签: java quotes tokenize


【解决方案1】:

您可以使用正则表达式来提取此类信息。

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

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

【讨论】:

  • 对不起,我自己在那儿遗漏了双引号!
  • 你能解释一下([^\"]*)是做什么的吗?
  • @user1071840 括号( ) 使其成为正在捕获 组:匹配的内容可以稍后引用。方括号[ ] 定义了一个字符类:里面的任何字符都将被匹配——但^ 否定了该类:任何列出的字符除了都将被匹配。 \" 是一个双引号,因为双引号是 Java 字符串文字分隔符而被转义。 * 表示所有格匹配零个或多个前面的模式。所以,总而言之,([^\"]*) 的意思是,“匹配零个或多个除双引号外的任何字符,并将它们作为一个组记住。”
【解决方案2】:

查看 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"));

【讨论】:

    【解决方案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();
    

    【讨论】:

    • 我已经尝试过您的解决方案,并使用来自 Apache commons 的 StrTokenizer 并且有效,但这里的问题是它可能不仅仅是 2 对引号,也可能只有一对,或者更多
    • 完美而简单!
    【解决方案4】:

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

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

    字符串 webUrl = "www.eg.com";

    【讨论】:

    • 我不确定他正在解析的那行文本是 Java 源代码。这可能是他试图从 Java 程序中读取以提取一些信息的另一个脚本。
    • 我猜文本是 JavaScript 源代码。
    【解决方案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));
                }
      
              }
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2014-05-12
        • 1970-01-01
        • 2023-01-12
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        相关资源
        最近更新 更多