0

作成中のアルゴリズムのために特定の文字列をカットする必要があります。を使用してsubstring()いますが、複雑になりすぎて、実際には正しく動作しません。このトピックを見つけました 2つの正規表現「_」と「。」で文字列をカットする方法

試してみることにしましsplit()たが、それはいつも私に与えます

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^

これは私が持っているコードです:

     String[] result = "234*(4-5)+56".split("+");
      /*for(int i=0; i<result.length; i++)
      {
         System.out.println(result[i]);
      }*/
      Arrays.toString(result);

この刺激的な例外が発生する理由はありますか?

PSこれを修正したら、カットのアルゴリズムと電卓全体のアルゴリズムを投稿します(電卓を作成しているため)。それは本当に悪い電卓になるだろう、私は約束します:P

4

4 に答える 4

3

+in regex には特別な意味があります。通常の文字として扱われるには、バックスラッシュでエスケープする必要があります。

  String[] result = "234*(4-5)+56".split("\\+");

以下は、正規表現のメタ文字です。それらのいずれかを通常の文字として扱うには、バックスラッシュでエスケープする必要があります

 <([{\^-=$!|]})?*+.>

正規表現で文字がどのように機能するかについては、こちらを参照してください

于 2012-11-27T23:09:25.897 に答える
2

プラス+記号は、正規表現で意味を持ちます。これは、splitパラメーターの解析方法です。プラス記号を正規表現でエスケープする必要があります。

.split("\\+");
于 2012-11-27T23:10:05.073 に答える
2

+は正規表現量指定子 (の 1 つ以上をsplit意味する) であるため、メソッド内でエスケープする必要があります。

String[] result = "234*(4-5)+56".split("\\+");
于 2012-11-27T23:09:09.763 に答える
2

次のように文字列を分割する必要があります: -

String[] result = "234*(4-5)+56".split("[+]");

区切り文字としてをString.split取り、正規表現のメタ文字であるため、一致の繰り返しを意味するため、正規表現で使用するとエラーになります。regex+1 or morebare

文字クラスで使用して、+リテラルと一致させることができます。ではcharacter class、メタ文字やその他すべての文字が特別な意味を失っているためです。hiephen(-)その中には特別な意味しかありません。つまり、 range.

于 2012-11-27T23:09:17.830 に答える