2

私のJavaコードでは、文字列入力に上記の特殊文字のいずれかが含まれている場合、その前に。を付ける必要があり\ます。

特殊な文字セットは{+, -, &&, ||, !, (, ), {, },[, ], ^, "", ~, *, ?, :, \}です。使用してみinputString.replaceAll(old,new)ましたが、驚いたことに、「old」と「new」に適切な値を指定していても、機能しませんでした。

特別な文字を文字列配列に入れ、forループで繰り返し、文字列に存在するかどうかを確認しました(存在する場合)input.replaceAll(":","\\:")。しかし、それは私に意図した出力を与えていません。助けてください。

 String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}",
                    "[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };

        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[" + i + "]>>>>>>>>>>>>>>>" + arr[i]);
            System.out.println(search.contains((String) arr[i])
                    + "---------->" + arr[i]);

            if (search.contains((String) arr[i])) {
                System.out.println("..index..."+search.indexOf((String) arr[i]));
                String oldString = (String) arr[i];
                System.out.println("check if it has old string"
                        + search.contains(oldString));
                String newString = new String("\\" + arr[i]);
                System.out
                        .println("About to replace special chars....with..."
                                + newString);

                search = search.replaceAll(oldString, newString);
                String newSearch = new String(search.replaceAll(arr[i],
                        newString));
                System.out
                        .println("Search String after replaceAll is ------------->: "
                                + newSearch);
                System.out.println("--------------"
                        + search.replaceAll(arr[i], newString)
                        + "---------------" + search);

            }
        }
4

2 に答える 2

0

最初に(他のものをエスケープする前に)単一のバックスラッシュをエスケープするか、いくつかのバックスラッシュを二重にエスケープする必要があります。

例:1+1

=>+で置き換えます\+1\+1

=>\で置き換えます(おっと!)\\1\\+1

于 2013-01-07T13:53:21.520 に答える
0

答えがあるかどうかわかりません。今日、私は同じことを試みていました。私のソリューションを使用するようにコードを変更しました。お役に立てば幸いです。

String search = "$&+";

String[] arr = { "+", "-", "&&", "||", "!", "(", ")", "{", "}", "[", "]", "^", "\"", "~", "*", "?", ":", "\\", "AND", "OR" };

for (int i = 0; i < arr.length; i++) {
 System.out.println("arr[" + i + "]>>>>>>>>>>>>>>>" + arr[i]);
 System.out.println(search.contains((String) arr[i])
         + "---------->" + arr[i]);

 if (search.contains((String) arr[i])) {
     System.out.println("..index..."+search.indexOf((String) arr[i]));
     String oldString = (String) arr[i];
     System.out.println("check if it has old string"
             + search.contains(oldString));
     String newString = new String("\\\\" + arr[i]);
     System.out
             .println("About to replace special chars....with..."
                     + newString);

     search = search.replace("\\" + oldString, newString);
     String newSearch = new String(search);
     System.out
             .println("Search String after replaceAll is ------------->: "
                     + newSearch);

 }

}

于 2013-08-22T11:18:20.627 に答える