web-dev-qa-db-ja.com

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"

見積もりの​​間のデータを取得するにはどうすればよいですか?

結果は次のようになります。

コミラ
マス、コミラ、トリック
a、言葉、は、comillas

24
atomsfat

正規表現を使用して、この種の情報を見つけることができます。

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

この例では、解析される行の言語が文字列リテラル内の二重引用符のエスケープシーケンスをサポートしていない、複数の「行」にまたがる文字列を含む、または単一引用符のような文字列の他の区切り文字をサポートしていると想定しています。

49
erickson

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"));
15
SingleShot

ファイルからのすべての出現を取得したい場合:

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

        }

    }

}
0
Dani
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();
0
jsight

まず、==ではなくequals()を使用する必要があることに注意してください。 「==」はデフォルトで、それらがメモリ内の同じインスタンスであるかどうかを尋ねますが、これは文字列の場合もそうです。 myString.equals( "...")を使用すると、文字列の値を比較できます。

引用符の間の値をどのように取得するかについては、どういう意味かわかりません。 「...」は実際のオブジェクトです。または、次のようにすることもできます。

String webUrl = "www.eg.com";

0

1行だけでなく、ソースファイル全体を解析する場合、関数の文法に基づくパーサーは、文字列に基づいてこれを行うよりも安全な選択です。

これらはあなたの文法では文字列リテラルになると思います。

0
Uri