58

<%= と %> の間の文字列を取得しようとしています。これが私の実装です。

String str = "ZZZZL <%= dsn %> AFFF <%= AFG %>";
Pattern pattern = Pattern.compile("<%=(.*?)%>");
String[] result = pattern.split(str);
System.out.println(Arrays.toString(result));

戻る

[ZZZZL ,  AFFF ]

しかし、私の期待は次のとおりです。

[ dsn , AFG ]

どこが間違っていて、どうすれば修正できますか?

4

4 に答える 4

8

Jlordo アプローチは特定の状況をカバーします。そこから抽象メソッドを作成しようとすると、' textFrom' が ' ' の前にあるかどうかを確認するのが困難になる可能性がありますtextTo。それ以外の場合、メソッドは、テキスト内の ' ' の他の出現に対して一致を返すことができtextFromます。

この欠点をカバーする、すぐに使える抽象メソッドを次に示します。

  /**
   * Get text between two strings. Passed limiting strings are not 
   * included into result.
   *
   * @param text     Text to search in.
   * @param textFrom Text to start cutting from (exclusive).
   * @param textTo   Text to stop cuutting at (exclusive).
   */
  public static String getBetweenStrings(
    String text,
    String textFrom,
    String textTo) {

    String result = "";

    // Cut the beginning of the text to not occasionally meet a      
    // 'textTo' value in it:
    result =
      text.substring(
        text.indexOf(textFrom) + textFrom.length(),
        text.length());

    // Cut the excessive ending of the text:
    result =
      result.substring(
        0,
        result.indexOf(textTo));

    return result;
  }
于 2015-12-12T15:50:07.783 に答える