1

a の中括弧の存在を確認しようとしましたString。しかし、それは戻りますfalse。誰でも私に解決策を教えてもらえますか。

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
Pattern p = Pattern.compile("^[{]");
Matcher m = p.matcher(code);
System.out.println(m.matches());

前もって感謝します

4

4 に答える 4

1

^文字列の開始を意味します。文字列内の任意の場所で検索する必要があるため、削除する必要があります。

ああ、使わないで、代わりmatchesに使ってください。文字列全体がパターンに一致するかどうかをチェックし、文字列内のパターンを探します。findmatchesfind

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
Pattern p = Pattern.compile("[{]");
Matcher m = p.matcher(code);
System.out.println(m.find());

ただし、contains("{")Rohit が述べたように、より単純になります。

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
System.out.println(code.contains("{"));

置換を行いたい場合Matcherは、replaceAll機能がありますが、そうStringです。これにより、すべての前に改行が追加されます{: (\\{エスケープの代替方法です{)

String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
System.out.println(code.replaceAll("\\{", "\n{"));

これであなたがどこに向かっているのかが正しければ、正規表現でコードのインデントを行うことはできません。これは増分/再帰的であり、正規表現では (うまく) 機能しません。これを行うには、文字列を手動で反復処理する必要があります。

于 2013-09-17T16:34:02.213 に答える
1

あなたの正規表現は、含まれているもの以外の他の文字を許可していません。また、正規表現^の一致を の先頭Stringのみに修正したため{String.

Matcher.matches()文字列全体を正規表現に一致させようとします。 Matcher.find()正規表現パターンがString

  String code = "class Demo{public static void main(String[] args) {System.out.println(\"ABC\");}}";
  Pattern p = Pattern.compile("[{]");
  Matcher m = p.matcher(code);
  System.out.println(m.find());
于 2013-09-17T16:34:58.587 に答える
0

@Rohit Jain が示唆するように使用code.contains("{")するか、これを正規表現として使用します。

Pattern p = Pattern.compile("^*.[{]*.");

ワイルドカードがない場合、パターンは 1 つの文字列のみに一致します。つまり、"{"

于 2013-09-17T16:35:09.213 に答える