31

私はこのテキスト行を持っていますが、引用符の数は次のように変化する可能性があります:

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、trick
a、words、are、comillas

4

6 に答える 6

61

正規表現を使用して、この種の情報を釣り上げることができます。

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

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

于 2009-09-24T17:51:57.967 に答える
19

StringUtilsApache 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"));
于 2009-09-24T17:53:26.827 に答える
2
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();
于 2009-09-24T17:50:33.023 に答える
1

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

引用符間の値をどのように取得するのですか?私はあなたが何を意味するのかわかりません. "..." は実際のオブジェクトです。または、次のこともできます。

String webUrl = "www.eg.com";

于 2009-09-24T17:51:52.693 に答える
1

1 行だけではなく、ソース ファイル全体を解析する場合は、関数の文法に基づくパーサーを使用する方が、文字列に基づいて解析するよりも安全な選択になる可能性があります。

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

于 2009-09-24T17:52:25.270 に答える