3

コードが読み取っているいくつかの行を無視するようにコードを取得しようとしています。したがって、私のSSCEは次のとおりです。

public class testRegex {
    private static final String DELETE_REGEX = "\\{\"delete"; //escape the '{', escape the ' " '
    private static final String JSON_FILE_NAME = "example";
public static void main(String[] args){
    String line = null;
    try{
        BufferedReader buff = new BufferedReader (new FileReader(JSON_FILE_NAME + ".json"));
        line = buff.readLine        buff.close();
        }catch (FileNotFoundException e){e.printStackTrace();}
         catch (IOException e){e.printStackTrace();}
    String line=buff.readLine();
    System.out.println(line.contains(DELETE_REGEX));
    }
}

私のファイルには次の行のみが含まれています。

{"delete":{"status":{"user_id_str":"123456789","user_id":123456789,"id_str":"987654321","id":987654321}}}

しかし、これはfalseを出力します...私の正規表現は間違っていますか? ここでアドバイスされているよう{に、ダブルエスケープして一致させています。\\{

文字列リテラル"\(hello\)"は不正であり、コンパイル エラーが発生します。文字列 (hello) と一致させるには、文字列リテラル"\\(hello\\)"を使用する必要があります。

そして、"を使用してエスケープし\"ます。

では、どうすればプログラムを修正できますか?

*ps手動で入力しようとしましたline = "\{\"delete"(行は正規表現ではなく文字列であるため、エスケープを二重にする必要はありません)が、同じ結果が得られました。

4

2 に答える 2

6

String.contains() は、正規表現検索ではなく完全一致を実行します。{ 中括弧をエスケープしないでください。

于 2012-09-27T14:55:07.767 に答える
1

containsメソッドはパラメーターとして正規表現を使用しないため、. をエスケープする必要はありません{

単純に

line.contains("{\"delete")
于 2012-09-27T14:55:30.077 に答える