0

SO内で何時間もグーグル検索と検索を行った後、ついにあなたに質問する必要がある場所にたどり着きました! :)

状況は次のとおりです。Web サービスは CDATA でデータを配信します。このデータは解析され、モデルに入れられます。Spring MVC を使用して、JSP ファイル内のモデルにアクセスして作成します....ここで要点です... JSON! 聞くな、歴史的に!;-)

さて、どういうわけか誰かが複数の (バック) スラッシュをタイトル プロパティに入れるという素晴らしいアイデアを思いつきました。getTitle() メソッドは文字列 "/// Glasvegas \\" を返します。JSON (JSP 内で作成された) で JavaSCript eval() を実行して JavaScript Json オブジェクトを取得する場合、これはもちろん機能しません。バックスラッシュをコメントとして解釈するだけで、Json が無効になります。apache.common と springframework の escapeHtml() メソッドを使用しようとしましたが、どちらもバックスラッシュを無視し、他のすべての特殊文字を正しくエンコードします。

次に、独自のメソッドを作成しようとしました。

public static String escapeHTML(String string) {         
    String foreslash="\";
    String regex="\\\\";
    System.out.println(string.replaceAll(regex,foreslash));
    string.replaceAll(regex,foreslash);
    return string;
}

コンソール出力では、文字列は正しく置き換えられていますが、リターンでブレークしてデバッガーで変数「文字列」を調べると、「/// Glasvegas \\」のままです。生成された JSP も同様です。

だから、私はここでちょっと迷っています。

よろしく、ASP

4

1 に答える 1

1

文字列は不変です。メソッド「replaceAll」の名前は、文字列オブジェクト自体を実際に変更しているように聞こえますが、そうではありません。メソッドは操作の結果を返すだけです。これが、System.out.println から正しい出力が得られる理由です。しかし、呼び出しが System.out.println 内ではなく、それ自体で立っているという理由だけで、今度は文字列オブジェクトで変更を永続的にしたいことを Java コードがそれ自体で理解する必要があると考えて、あなたは考えを誤ります。 ;)

メソッドの最後を次のように書き直してみてください。

System.out.println(string.replaceAll(regex,foreslash));
return string.replaceAll(regex,foreslash);

また、「フォアスラッシュ」という実行可能な名前は、92 がスラッシュのコードであるかのように聞こえます。そうかもしれませんが、わかりません。正規表現はバックスラッシュを探します。それは少し紛らわしいです!

于 2012-06-25T12:46:15.410 に答える