2

javadocによると:

パターンに一致する入力シーケンスのすべてのサブシーケンスを、指定された置換文字列に置き換えます。

これは、一致が行われない限り、この呼び出しが置き換えられないことを示しているようです。

そしてまだ:

public class MisMatch {
    public static void main(String args[]){
        Pattern doubleSlash = Pattern.compile("\\\\");
        String stringWithSingleSlash = "maybe\\no";
        System.out.println("Matches:"+doubleSlash.matcher(stringWithSingleSlash).matches());
        String replace = doubleSlash.matcher(stringWithSingleSlash).replaceAll("ABC");
        System.out.println(replace);
        System.out.println("Equal:"+(stringWithSingleSlash.equals(replace)));
    }
}

これは印刷します:

一致:false

多分ABCno

等しい:false

  • したがって、一致していませんが、それでも置き換えられます。ここで何が欠けていますか?
4

2 に答える 2

2

matchesonは、文字列全体が一致する場合にtrueを返します-サブ文字列とは一致しません。

したがって、の代わりにだった場合stringWithSingleSlashは、trueを返します。"\\""mabye\\no"matches

doubleSlash単一のバックスラッシュに一致するという事実が混乱する場合、説明は"\\\\"2つのバックスラッシュを持つ文字列であり、正規表現エンジンは2つのバックスラッシュを1つのエスケープされたバックスラッシュとして解釈します(バックスラッシュは正規表現および文字列リテラルのエスケープ文字であるため)。

于 2011-01-02T04:35:58.443 に答える
0

このmatches()関数は、文字列全体に対してパターンを一致させようとします。を使用する必要があるのは、が返さ
れるかどうかを確認することのようです。.find()true

Matcherjavadocを見てください。抜粋は次のとおりです。

作成したマッチャーは、次の3種類の照合操作を実行するために使用できます。

  • matchesメソッドは、入力シーケンス全体をパターンと照合しようとします。

  • LookingAtメソッドは、最初から入力シーケンスをパターンと照合しようとします。

  • findメソッドは、入力シーケンスをスキャンして、パターンに一致する次のサブシーケンスを探します。

これらの各メソッドは、成功または失敗を示すブール値を返します。一致の成功に関する詳細情報は、マッチャーの状態を照会することで取得できます。

于 2011-01-02T04:38:50.447 に答える